sedを使用して代替文字列の内容を保存する方法

sedを使用して代替文字列の内容を保存する方法

sed見つかったテキストをそのまま残し、最後にコロンを追加してテキスト行をこれに置き換えようとしています。

特に、ファイルにはこの形式の行がたくさんあります。

CWMPVendorXEventCodeCutOff              20
CWMP<othertitle>              20

この形式に変更したいです。

CWMPVendorXEventCodeCutOff:              20
CWMP<othertitle>:                        20

私は今ここにいます

sed 's_CWMP.*?\\s_CWMP.*?:_g'

しかし、これは明らかに動作しません。どうすればいいですか?

答え1

sed 's/\<CWMP[^[:blank:]]*/&:/' file

置換部分は、置換&された正規表現部分と一致する文字列で置き換えられます。CWMP空白以外の文字が続くものと一致します。先頭のパターンは、文字列が\<単語CWMPの先頭に表示されることを確認します(つまり、他の部分の部分文字列としては表示されません)。

使用

sed 's/^CWMP[^[:blank:]]*/&:/' file

行の先頭で強制的に一致させる必要がある場合。


場合によっては、以下を使用することもできます。

awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file

これは、行内のスペースで区切られた最初の単語を一致させ、その単語の^CWMP末尾:にaを追加すると仮定します。ただし、これは次の行の2つのフィールド間のすべてのスペースを「食べて」単一のスペースに置き換えます。

$ awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file
CWMPVendorXEventCodeCutOff: 20

$1 ~各行の先頭を一致させるには、つまり、行に最初のインデントが含まれていない場合は削除します。

答え2

sed -e 's/\(CWMPVendorXEventCodeCutOff\)/\1:/'

動作する必要があります。

答え3

次のawkコマンドを使用してテストするとうまくいきます。

注文する

awk '{$1=$1":";printf  "%s%30s\n",$1,$2}' filename| sed -r "s/\s+/ /g"

出力

awk '{$1=$1":";printf  "%s%30s\n",$1,$2}' y.txt | sed -r "s/\s+/ /g"

CWMPVendorXEventCodeCutOff: 20
CWMP<othertitle>: 20

関連情報