我需要一些sed正則表達式替換的幫助。用sed捕獲空格
從以下行:
Provides mysql
我想:
Provides mysql-5.5
最好的解決辦法,我能夠跟的是:
sed -i "s/\(Provides\)\(\s\)*\(mysql\)/\1\2mysql-5.5/g" my_file_containing_the_line
但結果是不是我想要的:
Provides mysql-5.5
這是不完美的,因爲我失去了間 「提供了」 和 「的mysql-5.5」
感謝
我需要一些sed正則表達式替換的幫助。用sed捕獲空格
從以下行:
Provides mysql
我想:
Provides mysql-5.5
最好的解決辦法,我能夠跟的是:
sed -i "s/\(Provides\)\(\s\)*\(mysql\)/\1\2mysql-5.5/g" my_file_containing_the_line
但結果是不是我想要的:
Provides mysql-5.5
這是不完美的,因爲我失去了間 「提供了」 和 「的mysql-5.5」
感謝
"s/\(Provides\)\(\s\)*\(mysql\)/\1\2mysql-5.5/g"
\2
組不包含所有空格
"s/\(Provides\)\(\s*\)\(mysql\)/\1\2mysql-5.5/g"
將工作。
$> echo "Provides mysql" | sed "s/\(Provides\)\(\s*\)\(mysql\)/\1\2mysql-5.5/g"
Provides mysql-5.5
旁邊,您可以使用--regexp-extended
選項來抑制多餘的轉義:
$> echo "Provides mysql" | sed --regexp-extended "s/(Provides)(\s*)(mysql)/\1\2mysql-5.5/g"
Provides mysql-5.5
甚至
$> echo "Provides mysql" | sed --regexp-extended "s/(Provides\s*)(mysql)/\1\2-5.5/g"
Provides mysql-5.5
更改這個空格:
\(\s\)*
這樣:
\(\s*\)
這樣捕獲組包含所有的\s*
,而不僅僅是一個單獨的\s
。 (隨着\(\s\)*
,捕獲組最終只包含的最後一個空白字符。)
其實,對於這個問題,你可以將所有的捕捉組,並寫出兩種:
sed -i 's/\(Provides\s*\)mysql/\1mysql-5.5/g' my_file_containing_the_line
或:
sed -i 's/\(Provides\s*mysql\)/\1-5.5/g' my_file_containing_the_line
感謝。我喜歡你的變化。對不起,我不能接受多個回覆。我正在投票。 – redochka 2012-03-06 22:13:39
但爲什麼你不投票我的回答? :(((((( – 2012-03-06 22:16:56
Dude,它不是*全部*關於代表 – 2012-03-07 00:17:53
這可能爲你工作:
echo "Provides mysql " | sed '/^Provides/s/mysql/&-5.5/'
Provides mysql-5.5
它的工作原理。感謝--regexp-extended選項來抑制無聊逃跑。 – redochka 2012-03-06 22:12:38