3

複数のスペースの後に単語を置き換える必要があります:

実際には、ファイルには次の文字列が含まれています。

local   all             all                                     peer

私が変えなければならないもの

local   all             all                                     md5

など、さまざまな組み合わせを試しました

sed -i.bak 's/all[\+ ]peer/md5/g'  file

運が悪い。

何か案が ?

事前にThx

4

6 に答える 6

4

これを試してください(を使用GNU sed-Version 4.2.1):

sed -E -i.bak 's/(all\s+)peer/\1md5/' file
于 2013-06-09T22:51:19.963 に答える
2

この問題の一部が欠けていますか? 上記の最初の行を内容としてファイルを作成し、可能な限り単純な sed コマンドを実行しました...そして2行目で出てきました。

~ >cat test.txt
local   all             all                                     peer

~ >sed 's/peer/md5/g' test.txt
local   all             all                                     md5

複数行でも問題なく動作します...

~ >cat test.txt
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
~ >sed 's/peer/md5/g' test.txt
local   all             all                                     md5
local   all             all                                     md5
local   all             all                                     md5
local   all             all                                     md5
local   all             all                                     md5
local   all             all                                     md5

これがうまくいかないのは、md5 で置き換えたくない行の別の場所に「peer」という単語が表示される場合のみです。

これは、検索語の最初の出現のみを置き換えます。

~ >cat test.txt
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
~ >sed '0,/peer/s//md5/' test.txt
local   all             all                                     md5
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
local   all             all                                     peer
于 2013-06-09T23:15:48.827 に答える
1
sed 's/\(all *all  *\).*/\1md5/'
于 2013-06-09T22:51:34.100 に答える
1
perl -pe 's/(all[\s]+)peer/$1md5/g' your_file
于 2013-06-10T06:19:03.887 に答える