2017-11-18 21 views
0

私はmacOS High Sierraを使用していますが、Googleとこのサイトで1日を過ごした後にsedといくつかの問題がありました。正直なところ試しました私が考えることができ、示唆されたすべて。sedをmacOSで使用してbashスクリプトと置き換える方法

私は3行のexample.txtファイルを持っています。 line1 line2 line3

3行は何でもかまいませんが、私はそれらを前もって知りません。 (シナリオ) そして、ある時点で私はその行がどうなるかを知っています。

私が達成したいのは基本的には: という2番目の行を新しいデータで置き換えた '何でも'のライナーを使うことです。

sed -i "2s/.*/$NEW_DATA/" "$FILENAME"

これは動作するはずですが、MacOSの上で、これはそうではありません。

sed -ie "2s/.*/$NEW_DATA/" "$FILENAME"

注E?誰かがここにeを追加するように提案しましたが、そうです、それは.txtの後ろにeを追加することを意味します。私は2つのファイル、EXAMPLE.SQLのと

sed -i'' "2s/.*/$NEW_DATA/" "$FILENAME"

をexample.txte注 '' -iの後ろに、はい、スペースなしで終わりますか?これもうまくいくはずです。 それは、それは私が上に行く可能性が

\そのコマンドcが必要と文句を言うでしょうしませんが、要求は非常に簡単です:

MacOSで

、bashシェルスクリプトで、私は単純に、指定をどのように置き換えますか.txtファイル内のテキスト行と全く新しい行のテキスト - 前の行のテキストが分からない

これはawkなどの単純なmacOSライナーでもかまいませんが、それは問題ありません。それはsedされる必要はありません。しかし、私はこのサイトを検索すると、この点に関しては推薦されているようです。

+0

が行動をい-i "-eを使用すると変更されますか?私はいつも-eがとにかく暗黙だと考えました。 –

答えて

0

MacOSの上sed-i引数は、たとえば、バックアップファイルの拡張子が必要です。

/usr/bin/sed -i .bkp "2s/.*/$NEW_DATA/" "$FILENAME" 

バックアップファイル、使用したくない場合は、次から

/usr/bin/sed -i"" "2s/.*/$NEW_DATA/" "$FILENAME" 
+0

私はすでにこれについて言及しましたが、私は単一のファイルを望み、$ FILENAMEを作成しません。bkp – user8964123

+1

答えが更新されましたが、インプレース編集を行う場合は、実際にバックアップする必要があります。 – Zlemini

1

sed manページin macOS:

-i extension 
     Edit files in-place, saving backups with the specified extension. 
     If a zero-length extension is given, no backup will be saved. 

したがって、これは、バックアップを維持することなく、ライン2を置き換えるために使用することができます。

sed -i '' "2s/.*/$NEW_DATA/" testfile.txt 

目標は、例えば、使用することもできるライン2 awkの内容を交換するだけである場合:

awk 'NR==2{$0="your content"}1' testfile.txt > testfile.tmp && mv testfile.tmp testfile.txt 
+0

ちょうど-iはmacOSで動作しません。私はすでにこれについて言及しています。私は-i 'と-i'を試しました – user8964123

+0

macOSのハイシエラで 'sed'が修正されていない限り、これはうまくいくはずです。エラーを貼り付けることができますか? – nbari

+0

@ user8964123ここで重要な点は、 '-I'と' '''の間にスペースがなければならないことです。そうしなければ動作しません。残念なことに、GNU sedはスペースを許さないので、これを移植する方法はありません。 –

関連する問題