最初の文字を除くすべての文字を置き換える [重複]

最初の文字を除くすべての文字を置き換える [重複]

次のテキストファイルがあります。

test1,test2,test3
test4,test5
test6,test7,test8,test9,test10
test11,test12,test13,test14

カンマをセミコロンに置き換える方法、 2番目から始めましょう(そして最後まで続く)?

次の出力を取得したい。

test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14

答え1

これにより、これを行うことができます。

$ sed -e 's/,/;/g' -e 's/;/,/1' infile
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14

説明する

  • s/,/;/g次の項目をすべて置き換えます,;

  • s/;/,/1最初の項目を;次に置き換えます。,


GNUがあればsed、シンプルで使いやすい次のことを試すこともできます。

sed 's/,/;/2g' infile

答え2

入力にすでにセミコロンがある可能性がある場合は注意が必要です。

$ sed 's/,/\n/g; s/\n/,/; s/\n/;/g' input
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14

sedは入力を1行ずつ読み取るため、通常の入力には改行文字はありません。したがって、すべてのカンマを改行文字に置き換えることができ、混乱がないことがわかります。次に、最初の改行文字をコンマに復元します。最後に、残りの改行をセミコロンに置き換えます。

もっと詳しく:

  • s/,/\n/gすべてのカンマを改行に置き換えます。

  • s/\n/,/最初の改行文字をカンマで置き換えます。

  • s/\n/;/g残りの改行をセミコロンに変更します。

答え3

使用awk:

awk '{gsub(",", ";"); sub(";", ","); print}' file.txt
  • gsub(",", ";")すべて,次へ交換;

  • sub(";", ",")最初のものを;次に置き換えます。,

例:

% cat file.txt
test1,test2,test3
test4,test5
test6,test7,test8,test9,test10
test11,test12,test13,test14

% awk '{gsub(",", ";"); sub(";", ","); print}' file.txt
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14

答え4

$ cat ip.txt 
test1,test2,test3
test4,test5
test6,test7,test8,test9,test10
test11,test12,test13,test14
test15

$ perl -F, -ane 'print "$F[0]"; print ",".join(";",@F[1..$#F]) if($#F > 0)' ip.txt 
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14
test15


他の方法:

perl -F'/(,)/,$_,2' -ane '$F[2] =~ s/,/;/g; print @F'
  • /(,)/,$_,2$_使用された方法に応じて,(入力ライン)を2つの部分に分け(,)、区切り文字をキャプチャし、以下に説明するように3つの要素を作成します。
  • $F[0]最初のフィールドを取得します。存在する場合はインポートします$F[1],
  • $F[2]残りのフィールドを取得する(存在する場合)


もう一つの方法があります。sed 's/,/;/2g'

perl -pe '$c=0; s/,/++$c<2 ? $& : ";"/ge' ip.txt
  • 各行のカウンタ初期化
  • 交換時に必要に応じてカウンタ値を確認してください。
  • 修飾子を使用すると、ePerlコードが代替セクションに表示されることがあります。

関連情報