Help us understand the problem. What is going on with this article?

sedを使ってみた

More than 3 years have passed since last update.

テスト用の入力文字列

lorem.txt
Lorem ipsum dolor sit
amet,
consectetur
adipiscing
elit.

特定の文字を置換する

sed -e y/置換前文字/置換後文字/
コマンド例
sed -e y/l/!/ lorem.txt
出力結果
Lorem ipsum do!or sit
amet,
consectetur
adipiscing
e!it.

l(小文字のエル)が!に置換されました。

置換前文字と対応するように複数の置換後文字を指定することもできます。

コマンド例
sed -e y/lor/!@#/ lorem.txt
出力結果
L@#em ipsum d@!@# sit
amet,
c@nsectetu#
adipiscing
e!it.

注意点は、文字列を置換するのではなく文字単位での置換をするということです。また、置換前文字と置換後文字の文字数が違うとエラーになります。

文字列を置換する

sed -e s/置換前文字列/置換後文字列/
コマンド例
sed -e s/it/**/ lorem.txt
出力結果
Lorem ipsum dolor s**
amet,
consectetur
adipiscing
el**.

文字列置換では正規表現を使うこともできます。たとえば[uep](u, e, p のいずれか)を@に置換するには次のようにします。

コマンド例
sed -e s/[uep]/@/ lorem.txt
出力結果
Lor@m ipsum dolor sit
am@t,
cons@ctetur
adi@iscing
@lit.

…あれ、ところどころ置換されていない文字があります。
これは正規表現による置換は各行につき最初にマッチした箇所だけを置換するようになっているためです。最初にマッチした箇所以外も全て置換するようにするには、次のように末尾にgを付けます。

sed -e s/置換前文字列/置換後文字列/g
コマンド例
sed -e s/[uep]/@/g lorem.txt
出力結果
Lor@m i@s@m dolor sit
am@t,
cons@ct@t@r
adi@iscing
@lit.

正規表現について詳しく知りたい方はこの辺を参照

niusounds
REALITYで活動中のスマホアプリエンジニアです。シンフォニックメタルとフォークメタルが好き。 VSCodeおじさん。
https://niusounds.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away