【问题标题】:sed replace string in a first linesed 替换第一行中的字符串
【发布时间】:2012-09-13 14:49:53
【问题描述】:

如何使用“sed”程序替换文件的第一行中的字符串?

s/test/blah/11s/test/blah/ 命令似乎不起作用。还有其他方法吗?

【问题讨论】:

  • 1s/test/blah/“不起作用”呢?

标签: string replace sed


【解决方案1】:

这可能对你有用(GNU sed):

sed -i '1!b;s/test/blah/' file

只会将第一行的test 替换为第一行的blah

或者如果您只想更改第一行:

sed -i '1c\replacement' file 

【讨论】:

  • @lzap "1!b" = 如果not 在线1 然后branch 到脚本结尾
  • 使用b 可以忽略其他替换,例如在使用多个-e 选项时。
  • 这很好,但仅适用于第一行的第一个匹配项。如果您要替换的字符串在第一行中多次找到并且您需要替换所有字符串怎么办?在这种情况下,此解决方案不起作用。
  • @CarolinaCárdenas 我用这个:sed -i '1s/test/blah/g' file
【解决方案2】:

这样就可以了:

sed -i '1s/^.*$/Newline/' textfile.txt

未能确保匹配仅对第一行是唯一的:

sed -i 's/this is line one and its unique/Changed line one to this string/' filename.txt

-i 选项将更改写入文件,而不仅仅是将输出显示到标准输出。

编辑:

通过匹配公共字符串来替换整行将是:

sed -i 's/^.*COMMONSTRING$/Newline/'

^ 匹配行首,$ 匹配行尾,.* 匹配直到COMMONSTRING 的所有内容

【讨论】:

  • 该行每次都不同,最后有一个共同的字符串,但是你给了我一个如何解决这个问题的想法,谢谢! ;)
【解决方案3】:

这会替换所有匹配项,而不仅仅是第一个匹配项,当然只替换第一行:

 sed -i '1s/test/blah/g' file

/g 做到了替换多个匹配项(如果存在)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多