📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の10版が非表示) | |||
| 19行目: | 19行目: | ||
<br> | <br> | ||
また、<code>-f</code>オプションで変換手順を記載したスクリプトファイルを指定できる。その時、指定したファイルの内容に従って処理される。<br> | また、<code>-f</code>オプションで変換手順を記載したスクリプトファイルを指定できる。その時、指定したファイルの内容に従って処理される。<br> | ||
<br><br> | |||
== sedのインストール == | |||
==== パッケージ管理システムからインストール ==== | |||
多くのLinuxディストリビューションでは、最小インストールでsedがインストールされている。<br> | |||
もし、何らかの理由でインストールされていない場合は、パッケージ管理システムからsedインストールすることができる。<br> | |||
sudo zypper install sed | |||
<br> | |||
==== ソースコードからインストール ==== | |||
手動でsedをインストールする場合、ソースコードからsedをインストールする。<br> | |||
<br> | |||
[https://ftp.gnu.org/gnu/sed/ GNUソフトウェアの公式Webサイト]にアクセスして、sedのソースコードをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf sed-<バージョン>.tar.xz | |||
cd sed-<バージョン> | |||
<br> | |||
sedをビルドおよびインストールする。<br> | |||
mkdir build && cd build | |||
../configure --prefix=<sedのインストールディレクトリ> | |||
make -j $(nproc) | |||
make install | |||
<br> | |||
~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br> | |||
vi ~/.profile | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | |||
export PATH="/<sedのインストールディレクトリ>/bin:$PATH" | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
| 25行目: | 56行目: | ||
<br> | <br> | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | style="background-color:#fefefe;" | ||
|- | |- | ||
! オプション ! | ! style="text-align: center;background-color:#66CCFF;" | オプション | ||
! style="text-align: center;background-color:#66CCFF;" | 説明 | |||
|- | |- | ||
| -e <スクリプト名> || 指定したスクリプト(条件式)で変換処理を行う。 | | -e <スクリプト名> || 指定したスクリプト(条件式)で変換処理を行う。 | ||
| 54行目: | 86行目: | ||
== sedコマンドの条件式 == | == sedコマンドの条件式 == | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | style="background-color:#fefefe;" | ||
|- | |- | ||
! 条件式 ! | ! style="text-align: center;background-color:#66CCFF;" | 条件式 | ||
! style="text-align: center;background-color:#66CCFF;" | 説明 | |||
|- | |- | ||
| 行数 || 処理する行数を指定する | | 行数 || 処理する行数を指定する | ||
| 115行目: | 148行目: | ||
|} | |} | ||
</center> | </center> | ||
<br><br> | |||
== デリミタ == | |||
sedコマンドには、置換のデリミタ (区切り文字) が複数存在する。<br> | |||
機能的には同じ結果をもたらす。<br> | |||
<br> | |||
デリミタとしては他にも <code>:</code>、<code>@</code>、<code>#</code>などの文字を使用することができる。<br> | |||
<br> | |||
# <code>/</code>を区切り文字として扱う場合 | |||
sed -i "s/<lastmod>.*</lastmod>/<lastmod>${current_date}</lastmod>/g" hoge.xml | |||
# <code>|</code>を区切り文字として扱う場合 | |||
sed -i "s|<lastmod>.*</lastmod>|<lastmod>${current_date}</lastmod>|g" hoge.xml | |||
<br> | |||
これらの違いが重要になる理由を以下に示す。<br> | |||
* 可読性 | |||
*: パスやURLを含む文字列を扱う場合、/を含むことが多いため、|を使用すると読みやすくなることがある。 | |||
* エスケープの必要性 | |||
*: /をデリミタとして使用する場合、置換対象やパターン内に/が含まれている時、それをエスケープする必要がある。 | |||
*: |を使用すると、/をエスケープする必要がない。 | |||
<br> | |||
上記では、XMLタグを扱っているため、どちらを使用しても問題ない。<br> | |||
しかし、より複雑なパターンや<u>/ (スラッシュ)</u> を含む文字列を扱う場合は、<u>| (バーティカルバー)</u> を使用する方が便利な場合がある。<br> | |||
<br><br> | <br><br> | ||
== 使用例 == | == 使用例 == | ||
テキストファイルの5~10行目を削除する。<br> | テキストファイルの5~10行目を削除する。<br> | ||
sed -e "5,10d" test.txt | sed -i -e "5,10d" test.txt | ||
<br> | <br> | ||
テキストファイル内の"Nikkei Linux"を"日経Linux"に変換する。<br> | テキストファイル内の"Nikkei Linux"を"日経Linux"に変換する。<br> | ||
sed -e "s/Nikkei Linux/日経Linux/g" test.txt | sed -i -e "s/Nikkei Linux/日経Linux/g" test.txt | ||
<br> | <br> | ||
"Error"という文字列がある行に対して、"### Check Line ###"という新しい行を追加する。<br> | "Error"という文字列がある行に対して、"### Check Line ###"という新しい行を追加する。<br> | ||
sed -e "/Error/i #### Check Line ###" test.txt | sed -i -e "/Error/i #### Check Line ###" test.txt | ||
<br> | |||
複数の命令を1度に実行する。<br> | |||
# "baseball"を"swimming"に置換した後、"rugby"を含む行を削除 | |||
sed -i -e 's/baseball/swimming/' -i -e '/rugby/d' test.txt | |||
<br> | |||
複数のファイルを一括置換する。<br> | |||
# 複数のファイル内の“apple”を“orange”に置換 | |||
sed -i 's/apple/orange/' test1.txt test2.txt test3.txt | |||
<br><br> | <br><br> | ||
| 383行目: | 447行目: | ||
sedコマンドの置換対象の文字列の入力において、[Ctrl] + [V]、[Ctrl] + [M]と入力する。<br> | sedコマンドの置換対象の文字列の入力において、[Ctrl] + [V]、[Ctrl] + [M]と入力する。<br> | ||
sed -e 's/^M//g' CRLF.txt > LF.txt # "^"は制御文字であるため、エスケープは不要 | sed -e 's/^M//g' CRLF.txt > LF.txt # "^"は制御文字であるため、エスケープは不要 | ||
<br> | |||
==== 変数を使用した文字列置換 ==== | |||
置換パターンの指定には、変数の値を使用することができる。<br> | |||
sed -e "s/${変数名}/置換後パターン/" | |||
sed -e "s/置換対象パターン/${変数名}/" | |||
sed -e "s/$VAR1/$VAR2/" | |||
<br> | |||
VAR="hoge" | |||
echo "hoge piyo fuga" | sed -e "s/${VAR}/foo/" # 変数VARの値(hoge)をfooに置換 | |||
foo piyo fuga | |||
echo "hoge piyo fuga" | sed -e "s/fuga/$VAR/" #↑変数VARの値(hoge)が置換パターンに使用される | |||
hoge piyo hoge | |||
<br> | |||
==== 行を指定した置換 ==== | |||
sedコマンドは、行番号を指定することにより、限定された範囲内でのみ処理を行うことができる。<br> | |||
# 特定の1行のみで置換を行う | |||
sed -e '<行番号>s/パターン1/パターン2/' | |||
# 開始行~終了行の範囲でのみ置換を行う | |||
# sの直前に対象とする行番号を指定する | |||
sed -e '<開始行>,<終了行>s/パターン1/パターン2/' | |||
<br> | |||
ある特定の行のみを置換対象とする場合、または、N行目〜M行目のみを置換対象とする場合は、<br> | |||
対象とする行の行番号を指定することで、処理が適用される範囲を限定することができる。<br> | |||
<br> | |||
以下の例では、テキストファイルに対して、置換処理を行っている。<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
333 ABC | |||
<br> | |||
2行目のみを処理対象とする。<br> | |||
sed -e '5s/ABC/OK/' Sample.txt | |||
111 ABC | |||
222 OK | |||
333 ABC | |||
<br> | |||
2~3行目のみを処理対象とする。<br> | |||
sed -e '2,3s/ABC/OK/' Sample.txt | |||
111 ABC | |||
222 OK | |||
333 OK | |||
<br> | |||
==== 特定の行を削除する ==== | |||
特定の文字列を含む行を削除するには、<code>d</code>を指定する。<br> | |||
<br> | |||
N行目またはN行目~M行目を削除する場合、削除対象となる行のパターンと<code>d</code>を指定することで、そのパターンを含む行を削除できる。<br> | |||
この処理は、置換ではなく削除であるため、置換後のパターンを指定する必要はない。<br> | |||
sed -e '/パターン/d' | |||
<br> | |||
以下の例では、テキストファイルに対して削除処理を行っている。<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
333 ABC | |||
<br> | |||
333を含む行を削除する。<br> | |||
sed -e '/333/d' Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
上記は、<code>grep -v</code>コマンドでも同様の処理ができる。<br> | |||
grep -v "333" Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
空行を削除する。 | |||
空行は、行頭と行末の間に何も存在しない行であるため、正規表現の<code>^$</code>で表すことができる。<br> | |||
これを置換対象パターンに指定することで、空行を削除することができる。<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
sed -e '/^$/d' Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
行中に含まれる置換パターンに関係なくN行目を削除するには、置換パターンを指定せずに<code>d</code>に行番号のみを指定する。<br> | |||
# 単一行の削除 | |||
sed -e '<行番号>d' | |||
# 複数行の削除 | |||
sed -e '<開始行>,<終了行>d' | |||
<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
333 ABC | |||
<br> | |||
sed -e '3d' Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
sed -e '2,3d' Sample.txt | |||
111 ABC | |||
<br> | |||
最下行を削除するには、最下行を表す<code>$</code>を行番号の代わりに指定する。<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
333 ABC | |||
<br> | |||
sed -e '$d' Sample.txt | |||
111 ABC | |||
222 ABC | |||
<br> | |||
==== 特定の行のみを表示する ==== | |||
N行目またはN~M行目のみを表示するには、<code>-n</code>オプション、行番号、<code>p</code>を指定する。<br> | |||
# N行目を表示 | |||
sed -n '<行番号>p' | |||
# N行目~M行目を表示 | |||
sed -n '<開始行>,<終了行>p' | |||
<br> | |||
1行目のみを表示する。<br> | |||
cat Sample.txt | |||
111 ABC | |||
222 ABC | |||
333 ABC | |||
<br> | |||
1行目のみを表示する。<br> | |||
sed -n '1p' Sample.txt | |||
111 ABC | |||
<br> | |||
2~3行目のみを表示する。<br> | |||
sed -n '2,3p' Sample.txt | |||
111 ABC | |||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ: | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] | ||