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