sedによるファイル内文字列の一括置換

何かと役立つ、sedコマンドによるファイル内文字列の一括置換

サンプルのファイルは下記のとおり、全部で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)

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
261位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
47位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm