嗨,我在文本文件中有这些牵引线:
debug "run_rc_script $_rc_elem faststop"
run_rc_script $_rc_elem faststop
我只想用例如 SOME_TEXT 替换第二行。我用
sed -i '' -e's|run_rc_script $_rc_elem faststop|SOME_TEXT|' /fu/bar
但两条线都发生了变化。我应该怎么办?
添加^
为行首。这样它只会匹配以 开头的行run_rc_script...
:
sed -i '' -e's|^run_rc_script $_rc_elem faststop|SOME_TEXT|' /fu/bar
$ sed 's|^run_rc_script $_rc_elem faststop|SOME_TEXT|' file
debug "run_rc_script $_rc_elem faststop"
SOME_TEXT
你知道,有一个小问题。这两行以制表符开头。我该怎么办?
正如肯特建议的那样,使用^\s*
:
$ sed 's|^\s*run_rc_script $_rc_elem faststop|SOME_TEXT|' file
debug "run_rc_script $_rc_elem faststop"
SOME_TEXT
$
在 sed 上逃脱:$ echo "hello$bye" | sed "s|hello$bye|adeu|g"
adeu
$ echo "hello$bye" | sed 's|hello$bye|adeu|g'
hello
在模式之前添加一点^
以表示行的开头。
sed -e's|^run_rc_script $_rc_elem faststop|SOME_TEXT|' /fu/bar
编辑:
如果行以 TAB 字符开头,您可以在模式中指定:
sed -e's|^\trun_rc_script $_rc_elem faststop|SOME_TEXT|' /fu/bar
为了保留前导空格/制表符,请尝试:
sed -e's|^\([ \t]\+\)trun_rc_script $_rc_elem faststop|\1SOME_TEXT|' /fu/bar