0

嗨,我在文本文件中有这些牵引线:

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

但两条线都发生了变化。我应该怎么办?

4

2 回答 2

2

添加^为行首。这样它只会匹配以 开头的行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
于 2013-07-03T09:01:51.563 回答
0

在模式之前添加一点^以表示行的开头。

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
于 2013-07-03T09:03:08.853 回答