sedによるファイル内文字列の一括置換
- Wed
- 00:16
- シェルスクリプト
何かと役立つ、sedコマンドによるファイル内文字列の一括置換
サンプルのファイルは下記のとおり、全部で10行で1-5行目までをもう一度繰り返し。
1.txt
オプションはいろいろありますが、とりあえずは下記だけ知ってれば何とかなるかも。
また、sedの変換結果はstdoutに出るので、複数ファイルをまとめて置換するとまとめstdoutに出るのでパースが必要。シェルスクリプト等で1ファイルづつループで処理させるなどするといいかも(というかこういうの既にあったりして使いまわしてる。書いてもすぐだけど・・・)。
123を678に変換するのとは違う。
6,7行目だけ変換
サンプルのファイルは下記のとおり、全部で10行で1-5行目までをもう一度繰り返し。
1.txt
1 11111 2 12345 3 ABCDE 4 abcde 5 AAAAA 6 11111 7 12345 8 ABCDE 9 abcde 10 AAAAA
オプションはいろいろありますが、とりあえずは下記だけ知ってれば何とかなるかも。
script | 機能 |
s/src/dst/ | 正規表現の置換。最後にgを付ければ1行内の全マッチの置換を行う。1行だけ処理するのとは違う。 |
y/abc/ABC/ | パターンスペースの置換。sとの違いは、一文字ずつ変換を行う。aをAに、bをBというように |
X | 数字を1つのみ指定した場合は、X行目のみ処理する。 |
from,to | 数字を2つ指定した場合は、from行目からto行目までを処理する。 |
また、sedの変換結果はstdoutに出るので、複数ファイルをまとめて置換するとまとめstdoutに出るのでパースが必要。シェルスクリプト等で1ファイルづつループで処理させるなどするといいかも(というかこういうの既にあったりして使いまわしてる。書いてもすぐだけど・・・)。
s/src/dst/の例
user01@PC01[tmp]$ sed -e "s/1/A/g" 1.txt AAAAA A2345 ABCDE abcde AAAAA AAAAA A2345 ABCDE abcde AAAAA user01@PC01[tmp]$ sed -e "s/1/A/" 1.txt A1111 A2345 ABCDE abcde AAAAA A1111 A2345 ABCDE abcde AAAAA
y/src/dst/の例
yはやってみないと良くわからないかも。下記の例だと、1>6、2>7、3>8に1文字ずつ変換。123を678に変換するのとは違う。
user01@PC01[tmp]$ sed -e "y/123/678/" 1.txt 66666 67845 ABCDE abcde AAAAA 66666 67845 ABCDE abcde AAAAA
行数指定の例
2行目だけ変換user01@PC01[tmp]$ sed -e "2 s/1/A/" 1.txt 11111 A2345 ABCDE abcde AAAAA 11111 12345 ABCDE abcde AAAAA
6,7行目だけ変換
user01@PC01[tmp]$ sed -e "6,7 s/1/Z/g" 1.txt 11111 12345 ABCDE abcde AAAAA ZZZZZ Z2345 ABCDE abcde AAAAA
- 関連記事
Comment
Trackback
- URL
- https://nosource.blog.fc2.com/tb.php/93-820b8605
- この記事にトラックバック(FC2Blog User)