sed は特定のパターンを取得して変更します。

sed は特定のパターンを取得して変更します。

次の内容を含むファイルがあります。

<general id="7" src="xyz" srcType="abc" link="positive" />
<general id="3" src="xyz" srcType="pqr" link="positive" />
..

src各名前を大文字に変更しようとします。たとえば、上記ではすべてを(最初の文字は大文字)xyzに置き換えたいと思います。Xyz

予想される出力は次のとおりです。

<general id="7" src="Xyz" srcType="abc" link="positive" />
<general id="3" src="Xyz" srcType="pqr" link="positive" />
..

試験を終えた正規表現パターンはsrc="(.*?)"行から「xyz」を抽出できますが、それを使用してsedファイルを置き換える方法は?

フォローしてみましたが、できません。

sed -E 's/srcName="(.*?)"/Xyz/1' ファイル名

ボーナスの質問ですが、どのように要約できますか?scr="との間のすべての内容は、"最初の文字が大文字の単語に変換できます。

答え1

XML を編集するには、XML 対応ツールを使用します。例えば、xsh、私が使用しているメンテナンスツールです。

open file.xml ;
for //@src set . xsh:subst(., "(.)", "\U$1") ;
save :b ;

答え2

XMLサポートツールは間違いなく良い方法です!クイックハッキング:

GNUからsed

sed -r 's/src="([a-z])/src="\U\1\E/g'  file.xml

より複雑な変更にはPerlをお勧めします。

perl -pe 's/src="\K(\w+)/ucfirst($1)/e'   file.xml

どこ

  • perl -pe command「readline、コマンド、印刷」ループです。
  • s/regexp/expression/e regexpをeval(expression)の結果に置き換えます。
  • src="\K 左コンテキストモードです

答え3

awkコマンドを使ってみましたが、うまくいきます。

awk -F 'src="' '{$2=(toupper(substr($2,1,1))substr($2,2));$2="src="$2;print $0}' filename|sed 's/src=/&"/g'

出力

<general id="7"  src="Xyz" srcType="abc" link="positive" />
<general id="3"  src="Xyz" srcType="pqr" link="positive" />

関連情報