BashSedの例

Bash Sed Examples



Bashを使用すると、($ {var / pattern / replace})のような変数展開を使用してパターン置換を実行できます。したがって、sedはこのようになります(sed -e‘s / pattern / replace / ’)。ただし、テキストファイルのパターンを置き換えるだけではありません。ここでは、例として、日常のタスクを支援する同等のコマンドとワークフローを使用してsedを再発見します。

sedの例のセットアップ

これは、例を設定するためのクイックガイドです。やりすぎないようにします。







言葉は、1から100までの数字を含むテキストファイルです。作成するコマンドがわからない場合は、Bashエクスポートコマンドのxargsのエクスポート機能を参照してください。あなたはそれがあなたの次のシェルスクリプトのインタビューにあるかもしれないことを決して知りません。



バー1行を含むテキストファイルです—。



old-phpphp7以降で壊れてしまう古いPHPの行を含むテキストファイルです。 (ヒント:ereg)





上記のすべての機能は、以下のセットアップ用機能に関するEndnoteに記載されています。

同等のコマンドを使用したsedの例

コマンドライン環境では、特定のタスクに対して複数の解決策があることがわかります。ただし、ほとんどの場合、抵抗が最小になるパスを使用する必要があります。これは、対応する同等のコマンドを含むsedコマンドの例のリストです。いくつかは以下で詳細に説明されます。



1.ランダムな行を印刷します(sort -R – | head -1と同等)

sed -NS '$((ランダム%100))NS'-

2.ファイルの最後の行を印刷します(ヘッド-1-に相当)

sed -NS '$ p'-

3.ファイルの最初の10行を印刷します(head -n 10-に相当)

sed 「10q」-

4.ファイルの最初の行を印刷します(tail -1-に相当)

sed -NS 「1p」-

5.文字のすべてのインスタンスを削除します(tr –delete ‘0’-と同等です。0は削除する文字です)

sed -と 's / 0 // g'-

6. csvファイルをtsvに変換します(tr ‘、’ ‘ t’に相当)-)

sed -と 's /、/ t / g'-

7.ファイルに行を追加します(猫バーに相当-)

sed '$ a ---'-

8.ファイルの先頭に行を追加します(cat – barと同等)

sed '1i ---'-

9.ファイル内のすべての行を印刷します(cat-と同等)

sed -NS -と 'NS'-

10.パターンに一致する行を印刷します(grep -e ‘^ 1’-と同等)

sed -NS -と '/ ^ 1 / p'-

11.パターンに一致する行を削除します(grep -v -e ‘^ 1’-と同等)

sed -と '/ ^ 1 / d'-

12.ファイルの行数を取得します(wc -l-と同等)

sed -NS -と '$ ='-

13.バックグラウンドでファイルに書き込む(同等のコマンドティー)

sed 'の$ {1}'-

sedを使用してteeコマンドを実装する例

すぐ上に、バックグラウンドでファイルに書き込むというラベルの付いた例があります。 teeコマンドのような音です。そうですね。ここでは、sedを使用してbashのteeを置き換える関数を実装する方法について詳しく説明します。

コマンド

ティー (()。
{{
テスト $ {#} -eq 1 || 戻る;
sed 'の$ {1}'-
}
主要(()。
ティーこれ;
これ

主要

出力

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

ここに、1から10までの整数の2つのリストが表示されます。1つ目はseqコマンドからのものです。 teeで書かれたファイルの猫から2番目に取得します。私はそれがばかげていることを知っていますが、それはうまくいきます!

sedを使用してファイル内のランダムな行を印刷する例

bashと少しのsedを使用して、ファイルにランダムな行を出力するとします。できますか?はい、できます!方法は次のとおりです。

次のような機能を実装する

  1. ファイルの行数Lを取得します
  2. 1とL、Rの間の乱数を生成します
  3. Rを印刷します

この関数は、入力が外部からパイプされることを想定しています。

コマンド

いくつかの行(()。
{{
関数lc(()。
{{
sed -NS -と '$ ='-
};
関数印刷行(()。
{{
sed -NS -と '$ {1}NS'-
};
臨時雇用者= $(( mktemp )。;
->> $ {temp};
$ {temp} |印刷行$((((ランダム$(( $ {temp} |lc)。+1 )。)。;
rm $ {temp}
}

使用例(1)

seq 100 |_

出力(1)

35

使用例(2)

カールhttps://linuxhint.com/bash_cut_command/ - 静けさ |ストリップタグ|いくつかの行

sedを使用してHTMLタグを削除する以下の例を参照してください。上記の例では、空の行に対して空白が返される場合があることに注意してください。演習として、それを改善することができます。

sedを使用してファイルの行を印刷する

ファイル内の特定の行を出力する関数をbashに実装するとします。 bash、head、tail、またはawkのループを使用してファイル内の単一行を印刷しようとすると、ファイル内の行を印刷するには手間がかかりすぎます。私たちがsedした良いこと。 sedを使用した結果の関数は次のようになります。

コマンド

印刷行(()。
{{
sed -NS '$ {1}NS'-
}

次に、単語に印刷行を使用するとどうなるかを見てみましょう。

コマンド

言葉|印刷行50

出力

50

わかった。見た目は良さそうですが、少し些細なことではないように見えるものを試してみましょう。

コマンド

宣言する -xf言葉
宣言する -xf印刷行
seq 1 10$((言葉| トイレ -NS )。 | xargs-私bash -NS '言葉|印刷行{} '

出力

1
十一
21
31
41
51
61
71
81
91

わかった。今ではそれはもっと似ています! sedをbashスクリプトで使用して、ファイル内の任意の行を出力する方法がわかります。

同等のコマンドのないsedの例

コマンドライン環境では、抵抗が最小になるソリューションへのパスがsedの方法である場合があります。そうしないと、そもそも必要以上の作業を行うことになります。いくつかのコマンドは以下で紹介されるかもしれません。

シェルスクリプトのすべての行をコマンドする

sed -と 's / ^ /#/'-
最初の行を削除します
sed -と 「1d」-
消去過去ライン
sed -と '$ d'-
パターンに一致する行の前に行を挿入します
sed '/ 0 $ / i ---'-
パターンに一致する行の後に行を挿入します
sed '/ 0 $ / ---'-
HTMLタグを取り除く
sed -と 's /†*。// g'-
eregをアップグレードする実行する古いphpコードphp7以降
sed 's / ereg(([^、] * )。([^)] * )。/strpos( 2、 1)/ g'
チェックもしも sed特定のバージョンよりも早い
sed -と 'v 4.5'-

bashで分岐するsedバージョンの例

上記の例には、bashでバージョン分岐を実装するために使用できる特定のバージョンよりもsedが古いかどうかを確認する行があります。これは、sed –version出力からバージョン番号を比較する関数を実装するよりも簡単だと思います。 。唯一の落とし穴は、vコマンドをサポートしていない以前のバージョンのsedがある場合、問題が発生することです。

コマンド

test-sed-version-最大で(()。 {{
捨てた -NS | sed 'v$ {1}'-2> /開発者/ヌル
}
try-version(()。
{{
捨てた -NS 'バージョン$ {1}。わかった。それをしなさい ';
test-sed-version-最大で$ {1} && {{
捨てた -NS '年';
NS
} || {{
捨てた -NS '新着'
};
捨てた ' 仕方。'
}
主要(()。
{{
ローカルv;
にとってv 4{{45};
NS
try-version$ {v};
終わり
}
主要

出力

バージョン4.4。わかった。古い方法でやってください。
バージョン4.5。わかった。新しい方法でやってください。

これらの文字を入力した時点で私のマシンで実行されているsedのバージョンは4.4であることに注意してください。これは、上記の出力を説明します。また、同時に、gnusedの最新バージョンは4.7で、私が持っているものよりも約3年古いものでした。私のセッドは古いです!実際、sed 4.0.6では、バージョンコマンドにパラメータが追加されたため、この戦略は少なくともv4.0.6で機能します。これは、バージョンが2003年の初めにリリースされたことを考えると寛大です。

私はいくつかの追加の掘り下げを行いました。実際には、NEWSが最新のソースコードを読み取っています。バージョン4.6には、スクリプトをダンプして出力行に注釈を付ける新機能–debugがあります。これにより、bashの関数によって生成されたsedスクリプトを標準形式に変換できます。いいね! bashでsedバージョンのブランチが必要であることを忘れないでください。そこで、このsedの例が役立ちます。

sedを使用してHTMLタグを削除するbash関数の例

上記の例では、HTMLタグを削除する行があります。それをbash関数に入れて、それを使用して、前回書いた記事からすべてのHTMLタグを取り除きましょう。

コマンド

ストリップタグ(()。
{{
sed -と 's /†*。// g'-
}
カールhttps://linuxhint.com/bash_cut_command/ - 静けさ |ストリップタグ

完璧とは言えませんが、少なくともターミナルで読むことができます。

ワークフローを使用したsedの例:ワークフローの例:find、grep、およびsedを使用してすべてを安全に置き換えます

-iオプションを指定してsedを使用して行った変更は元に戻せないと言っても過言ではありません。つまり、どのテキストを置き換えるかを完全に確信していない限り、意図した文字より1文字少なくなる可能性があります。そのため、この例では、ワークフローでsedを使用して、選択したすべてのファイルのテキストを安全に置き換えます。

ワークフロー

  1. 探す
  2. グリップ
  3. sed
探す

ここでは、置換の対象となるファイルを選択します。次の行に沿ってコマンドを使用することをお勧めします。

探す -タイプNS-名前 | グリップ -v-と| xargs-私 ...

たとえば、次のように、ファイルを制限して、gitリポジトリディレクトリを除くPHPファイルを置き換えることができます。

探す -タイプNS-名前*.php| グリップ -v -と '。行く' | xargs -私..。

bashのxargsコマンドの詳細をご覧ください。

グリップ

次に、次のように選択したファイルのsome_patternを照合してみます。 grepに-oオプションを使用しているため、出力には一致した文字列のみが表示されることに注意してください。

探す -タイプNS-名前*.php| グリップ -v -と '。行く' |
xargs -私 グリップ -とsome_pattern-また

上記のコマンドは、some_patternに一致する文字列のリストを返す必要があります。

sed

最後に、some_patternに一致するすべての文字列を置き換えます。これを行うには、次のようにgrepをsedに変換する必要があります。

探す -タイプNS-名前*.php| グリップ -v -と '。行く' |
xargs -私 sed -私 -とNS/some_pattern/置換/NS

grepコマンドはsed-iになり、-oオプションは削除されます。そして、あなたはそれを持っています。

これで、運をテストする代わりに、sedでどの文字列が置き換えられるかを事前に確認できます。

例で使用されているオプションに関する巻末注

簡単に説明したsedの例で使用されているオプションのリストを次に示します。

オプション 説明
-私 その場で編集します。入力がファイル(パイプインされていない)の場合、式の結果はファイルの内容を上書きします。

セッドは1つを受け入れます

例)sed-n…

-と -eは表現を表します。そのパラメーターはsed言語の式です。

セッドは多くを受け入れます

例)sed -e'expr1 '-e'expr2'

-NS 式の影響を受けない行を非表示にします。つまり、式がsed言語のprintステートメントである場合、printステートメントに含まれていない行は出力に含まれません。

例)sed-n…

利用可能なsedオプションの詳細については、sed –helpを参照してください。

例で使用されている同等のコマンドに関するエンドノート

次のコマンドラインユーティリティは、同等のコマンドとともにsedの例に含まれています。

  • 選別
  • しっぽ
  • グリップ
  • NS
  • ティー

末尾の文末脚注–同等のコマンドの例

例の–文字で何が起こっているのか疑問に思っている場合は、このメモが役立ちます。例のほとんどのコマンドの後に–文字を追加して、入力がパイプを介して受信されることを期待していることを示唆しています。あれは、

いくつかのファイル| 選別 -NS-| -1

ただし、左側のパイプにコマンドがある場合は、次のようにヒントを省略できます。

いくつかのファイル| 選別 -NS | -1

これが、例のコマンドの後の–文字で起こっていたことです。

セットアップのための機能に関する巻末注

あなたが探している場合、ここに上記の例のセットアップへの関数があります。宣言-fを使用して取得された出力。その他の使用法については、bashのdeclareコマンドの詳細をご覧ください。

コマンド

言葉(()。
{{
seq 100
}
バー(()。
{{
捨てた ---
}
old-php(()。
{{
捨てた 'ereg($ UA、' Bottybot ')'
}

結論

私はBashsedの例を書くのを楽しんだし、途中でいくつかの追加のトリックを拾い上げました。 Sedは、強力なコマンドラインユーティリティであり、テキストファイルを操作するための表現力豊かな言語です。 sedについて学ぶのが好きなら、まだ触れられていないことがまだたくさんあることを心配しないでください。セッドオン。