我有一个名为“测试文件”的文件。它只有以下两行(前一行带有#号,第二行内容相同但没有哈希):
#contents of line
contents of line
我想使用 sed 命令更新/替换第二行的内容。我知道它的简单语法,例如:
sed -i 's/.*contents of line.*/updated contents/' test-file
但上面的命令正在替换这两行,而我不想用前面的 # 符号更新第一行。
答案1
您可以通过以下方式进行编辑:
sed -e '/^#/!s/.*/UPDATED_CONTENTS/' input-file.txt
或者
sed -e '/^#/!c\
UPDATED_CONTENTS' input-file.txt
这可以理解为:对于任何不以 开头的行#
,将整行更改为指定的内容。
如果您担心 octothorpe 前面可能有空格,请调整正则表达式,/^[[:blank:]]*#/
同时保持其余部分不变。
答案2
尝试
sed 's/^[^#]*contents of line.*/updated contents/' test-file
或者以行锚点开头^
,并且您知道该行以 开头content ...
,您可以这样做:
sed 's/^contents of line.*/updated contents/' test-file
如果您知道要更新哪一行,则可以直接更改其地址行号,例如。
sed '2s/.*/updated content/' test-file
-i
当您对结果感到满意时添加。