【问题标题】:sed command - apply in all text (.txt) files of foldersed 命令 - 适用于文件夹的所有文本 (.txt) 文件
【发布时间】:2015-04-21 08:41:57
【问题描述】:

我想应用这个 sed 命令

sed '/begin 644/,$d' file1.txt > file1.txt

到目录的所有文件..基本上我想保持同名但在找到某个字符串后删除所有行..我如何调整这个sed命令以应用于所有文本(.txt ) 文件夹中的文件并保留其原始名称?

编辑:我使用的是 Mac OS X 我不知道 sed 命令是否有问题...

如果我尝试这样做

sed -i '/begin 644/,$d' *.txt

我得到一个错误 sed: 1: bad flag in substitution command : 'x'

第二次编辑:Anu 的回答有效!

【问题讨论】:

标签: bash sed


【解决方案1】:

只需使用就地版本的sed as

sed -i '/begin 644/,$d' file1.txt

【讨论】:

  • 在 MacOsX 上,您必须使用 'sed -i.random-file-extension',因为他们的 sed 版本很古老。
【解决方案2】:

您可以将此findsed 一起使用:

find . -maxdepth 1 -name '*.txt' -exec sed -i.bak '/begin 644/,$d' {} + 

或者如果你想保留begin 644:

find . -maxdepth 1 -name '*.txt' -exec sed -i.bak -n '1,/begin 644/p' {} + 

【讨论】:

  • 你好。我想在找到匹配项后删除行。例如,如果开始 644 写在第 100 行,我想删除从 100 到结尾的所有行。我认为您需要更改正则表达式
  • sed -n '1,/begin 644/p' file 实际上也是一样的,但我会用你的 sed 命令来修改它。
  • 它不起作用,它正在创建一个 .bak 文件,它是原始文件,然后是一个没有 .bak 名称的文件,它是空的。编辑:我使用的是 Mac OS X 也许有sed 命令有问题?
  • 这是为了迎合 OSX(我也在使用 OSX)。试试:find . -maxdepth 1 -name '*.txt' -exec sed -i.bak '/begin 644/,$d' {} \;
  • 对不起,对不起,你刚才在 cmets 中写的命令有效。谢谢:D
【解决方案3】:

您可以像这样使用就地编辑 sed 选项和星号选择器

sed -i '/begin 644/,$d' *.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2012-07-26
    • 2021-03-31
    • 2019-05-24
    • 2022-01-12
    • 2017-04-04
    相关资源
    最近更新 更多