您好我在文本文件中有这些拖曳线:
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
但两条线路都在变化。我该怎么办?
答案 0 :(得分: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
你知道,有一点问题。这两行以制表符开头。 我该怎么办?
作为Kent suggests,请使用^\s*
:
$ sed 's|^\s*run_rc_script $_rc_elem faststop|SOME_TEXT|' file
debug "run_rc_script $_rc_elem faststop"
SOME_TEXT
$
:$ echo "hello$bye" | sed "s|hello$bye|adeu|g"
adeu
$ echo "hello$bye" | sed 's|hello$bye|adeu|g'
hello
答案 1 :(得分: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