シェルスクリプト sedコマンドメモ
環境
環境によってsedは挙動が変わるそうなので、環境を記しておきます。
$ sw_vers
ProductName: macOS
ProductVersion: 11.2.3
BuildVersion: 20D91
Macのsedはバージョンを表示するオプションは存在してない模様。
shell - How can I check the version of sed in OS X? - Stack Overflow
-eオプション
-e command
Append the editing commands specified by the command argument to the list of commands.
eオプションを使用することで、コマンドをどこに記載するか明確にsedに伝えることができる。
eオプションを使用しないと、第一引数、第二引数と意味が変わってきてしまうので、とりあえずつけて実行すればよい。
バックアップファイルを作らせない
-i extension
Edit files in-place similarly to -I, but treat each file independently from other files. In particular, line numbers in each file
start at 1, the ``$'' address matches the last line of the current file, and address ranges are limited to the current file. (See
Sed Addresses.) The net result is as though each file were edited by a separate sed instance.
上書きのオプションi
はそのまま使うとバックアップファイルを作成するので空文字列を渡してバックアップファイルを作らせないようにします。
sed -i ''
sed -e '$s/abc/aaa/' <filename>
ファイルの最後の行のみ対象にする
ファイル内の指定の行数のみを変種するには、置換コマンドのsの前に数字をつけて上げればよい。
sed -e '1s/abc/aaa/' <filename>
範囲指定もできる
sed -e '41,50s/abc/aaa/' <filename>
$
は最後を表すので、以下で実行できる。
sed -e '$s/abc/aaa/' <filename>
置換スクリプトの区切り文字はスラッシュ以外も使える
bad flag in substitute command: 's'
置換対象に区切り文字が入っているとエラーが出ます。
変数展開などを使用していて、バックスラッシュが使用できない場合、区切り文字をスラッシュ以外の記号を使うことができます
|や#などいろいろ使えます。
sed -e "s|src =|src =$(TMP)|" <filename>
bashにおけるメタ文字
sedを使うためには、sedにテキストが渡される前に、bashがどのように文字を展開するのか知っておく必要があります。
bashではメタ文字を文字として使用するには、\
をつけてエスケープします。
メタ文字を完全無効化したい場合は文字列を'...'
で囲んで、'
を\でエスケープします。
シングルクォーテーション
'
のみがメタ文字
ダブルクオテーション
\
, $
, "
のみがメタ文字
Author And Source
この問題について(シェルスクリプト sedコマンドメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/keitean/items/81ededfc6a5aaeb8454c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .