【问题标题】:how to replace a pattern in only one file from current directory如何仅替换当前目录中一个文件中的模式
【发布时间】:2017-07-14 05:28:38
【问题描述】:

假设我在当前目录中有 4 个扩展名为 .txt 的文件,我只想从一个文件中替换一个模式。条件是我们不知道文件的名称,并且只能在一个文件中进行替换。其他文件不应受到影响。 示例:

用户/主页>ls -lart *.txt

a1.txt b1.txt c1.txt d1.txt

所有这些文件中都有一个单词“Day”,我想只在一个文件中将其替换为“Night”而不影响其他文件。我该怎么做?

我在下面尝试过,但它替换了所有 4 个文件中的模式。

找到 . -type f -name "*.txt"|xargs sed 's/Day/Night/g'

【问题讨论】:

  • 你要替换哪个(4个文件中)的单词?
  • 任何一个,但我们不知道文件名。
  • 如果您不知道要更改的位置,您如何知道更改是在哪个文件中进行的。
  • 你的用例是什么...问题应该被正确地框定。请参考...stackoverflow.com/help/how-to-ask
  • 我已经更新了问题,请检查

标签: shell unix


【解决方案1】:

使用该模式搜索文件并用-i 标志替换原地:

sed -i 's/Day/Night/' $(grep -l "Day" *.txt | head -1 )

【讨论】:

  • 感谢您的回复
  • 当其中一个答案对您有用时,您可以接受该答案。
【解决方案2】:

有很多方法可以做到这一点。

for file in *.txt; do 
    sed 's/Day/Night/g' "$file";
break; done

应该既快速又健壮。

【讨论】:

  • 感谢您的回复
猜你喜欢
  • 2012-08-11
  • 1970-01-01
  • 2017-12-30
  • 2017-12-06
  • 1970-01-01
  • 2014-03-29
  • 2020-12-06
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多