【问题标题】:Can anyone explain this sed command to me?谁能向我解释这个 sed 命令?
【发布时间】:2017-03-11 13:17:33
【问题描述】:

我刚刚在某人不在时接管了他们的代码,其中大部分是连贯的,但我遇到了 thsi 命令,但我无法弄清楚它在做什么:

sed 's@.*@@' filename.txt > filename2.txt

我已经对其进行了测试,它似乎是一种复杂的复制文件的方式,不幸的是我无法访问他的原始文件来运行它。有人可以帮忙吗?

【问题讨论】:

  • @ 只是一个分隔符,通常使用/,但您也可以替换任何其他字符。在这里它删除所有行并创建一个与输入文件长度相同的空输出文件。
  • @karafka 所指的“相同长度”是“相同数量的行”,但每行仅包含一个换行符(空行)。
  • 谢谢!我不知道 @ 可以用作分隔符,它真的让我失望。
  • / 是模式的一部分时最常用的其他字符,例如解析文件名路径。我见过的最令人困惑的字符是逗号,例如s,.*,,.

标签: bash shell sed command-line


【解决方案1】:

我找到了一些可能对你有帮助的参考资料。

  1. sed 's@/usr/local@@' 用于从输入文本中删除/usr/localhttp://www.grymoire.com/Unix/Sed.html

  2. .* 匹配字符串中的所有字符(包括空字符串)。

https://www.gnu.org/software/sed/manual/sed.html

你的情况 sed 's@.*@@' filename.txt > filename2.txt 将读取 filename.txt 文件的每个字符并进行复制。

【讨论】:

  • 不完全——这将读取 filename.txt 中的每个字符(换行符除外),并将其替换为 filename2.txt 中的任何内容。我猜这个意图与计算文件中的行数有关,在这种情况下,您可能需要查找wc -l,这样会更有效率...
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2019-02-07
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
相关资源
最近更新 更多