2

clexファイルに対していくつかの操作を実行しようとしました。形式は次のとおりです。

name:{id:xxx, ... ...} alias: aaa;
name:{id:yyy, ... ...} alias: bbb;
name:{id:zzz, ... ...} alias: ccc;

私がする必要があるのは、名前の後のコンテンツをエイリアスの後のコンテンツに置き換えることです。したがって、結果は次のようになります。

name:{id:aaa, ... ...} alias: aaa;
name:{id:bbb, ... ...} alias: bbb;
name:{id:ccc, ... ...} alias: ccc;

sedを使用して操作を完了することはできますか?正規表現を使おうとしましたが失敗しました。次に、forループを使用しようとしました。

readarray lines < "$file"

for line in "${lines[@]}"; 
do
    ???
done

しかし、交換する方法について苦労しました。誰かがこれを手伝ってもらえますか?

4

3 に答える 3

3

この行を試してください:

sed -r 's/(name:\{id:)[^,]*(.*alias: )([^;]*);/\1\3\2\3;/' file

サンプルデータを使用して:

kent$  echo "name:{id:xxx, ... ...} alias: aaa;
name:{id:yyy, ... ...} alias: bbb;
name:{id:zzz, ... ...} alias: ccc;"|sed -r 's/(name:\{id:)[^,]*(.*alias: )([^;]*);/\1\3\2\3;/'
name:{id:aaa, ... ...} alias: aaa;
name:{id:bbb, ... ...} alias: bbb;
name:{id:ccc, ... ...} alias: ccc;
于 2013-03-06T10:10:04.333 に答える
0

sedは次のようなもので使用できます。

s/(name:\{id:)[^,]*,(.*)(alias: )([^;]*)/\1\4,\2\3\4/g
于 2013-03-06T10:10:55.930 に答える
0

sed 's/name:{id:[a-z],+(.*)alias: ([a_z]+)/name:{id:\2,\1/alias: \1/

テストされていない、いくつかの制御文字をエスケープする必要があるかもしれないことをあなたに与えます。[a-z]+エイリアスマッチングに一致するようにを調整できます。

于 2013-03-06T10:11:00.460 に答える