在文件中指定行的开头插入字符

在文件中指定行的开头插入字符

我需要在文本文件中指定行的开头插入字符(#)。

输入示例:

Hellow1
Hellow2
Hellow3

所需输出

Hellow1
#Hellow2
Hellow3

答案1

#要在以单词 开头的行中插入 a Hellow2,您可以sed这样使用:

sed '/^Hellow2/ s/./#&/' input.txt >output.txt

#要在文本第二行的开头插入 a ,您可以sed这样使用:

sed '2 s/./#&/' input.txt >output.txt

&被替换为与模式匹配的任何内容。

我避免使用sed -i(就地编辑),因为我不知道sed您在使用什么,并且大多数实现都sed使用不兼容的方式来处理该标志(请参阅如何使用 sed -i (就地编辑)实现可移植性?)。

相反,像上面那样进行替换,然后

mv output.txt input.txt

如果你想用结果替换原始数据。这也让您有机会确保结果正确。

与以下内容等效awk

awk '/^Hellow2/ { $0 = "#" $0 }; 1' input.txt >output.txt

awk 'NR == 2 { $0 = "#" $0 }; 1' input.txt >output.txt

答案2

你的问题不清楚。假设您要注释掉特定文本:

sed -i.bak 's/^\(Hellow2\)$/#\1/'

这将对与字符串“Hellow2”完全匹配的任何行进行就地替换,并将它们替换为 # 后跟匹配的行。

答案3

s将命令应用于特定行的一般模式是[2addr]s... 其中2addr代表 0、1 或 2 个地址。换句话说,如果您想在与模式匹配的行之前插入 #:

sed -e '/pattern/s/^/#/'

如果您想在线更换$n

sed -e "${n}s/^/#/"  # (This requires that $n be a well formatted number)

如果要匹配 $n 到 $m 行的范围:

sed -e "${n},${m}s/^/#/"  # $n and $m must be well formed numbers.  eg '2'

如果要匹配匹配行pattern1和匹配“pattern2”的行之间的所有行:

sed -e '/pattern1/,/pattern2/s/^/#/' 

答案4

你可以这样做awk

awk '{if ($0 == "Hellow2") print "#"$0; else print $0}' yourfile > outputfile

相关内容