我需要在文本文件中指定行的开头插入字符(#)。
输入示例:
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