タグ付けされた質問 「sed」

sedは、テキストをフィルタリングおよび変換するためのコマンドラインストリームエディターです。

7
sed -i(インプレース編集)で移植性を実現するにはどうすればよいですか?
FreeBSDを実行している共有ホスティングであるサーバー用のシェルスクリプトを書いています。また、Linuxを実行しているPCでローカルにテストできるようにしたいと考えています。したがって、私はそれらを移植可能な方法で記述しようとしていますが、それsedを行う方法はありません。 私のウェブサイトの一部は生成された静的HTMLファイルを使用し、このsed行は各再生成の後に正しいDOCTYPEを挿入します: sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html} sedLinux上のGNU で動作しますが、FreeBSD sedは-iオプションの後の最初の引数がバックアップコピーの拡張であると想定しています。これは次のようになります。 sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html} しかし、GNUはsed順番に式が直後に続くことを期待します-i。(改行処理の修正も必要ですが、それはここですでに回答されています) もちろん、スクリプトのサーバーコピーにこの変更を含めることもできますが、バージョン管理にVCSを使用することは混乱します。完全に移植可能な方法でsedでこれを達成する方法はありますか?

2
日付出力から先行ゼロを削除する
dateコマンドのエイリアスを作成して、次の形式で日付を表示しました。 2013.06.14.12.10.02 このコマンドを使用して: alias date = date +"%Y.%m.%d.%H.%M.%S" 出力から先行ゼロを削除することを除いて、すべてがうまく機能します。 フォーマットを変更してそれを実現する方法はありません。私はそれをsed、やなどの他のコマンドに出力をパイプすることによってのみ行うことができると思いますawk。 私が実行しているOSはUbuntu 12.04.2 LTSです。
40 sed  awk  date 

11
「sed」による追加
で数学演算を実行しようとしていますsedが、変数を文字列として扱い続けます。入力は次の種類です。 $ echo 12 | sed 's/[0-9]*/&+3/' $ 12+3 出力として15が欲しいです。Pythonデーモンとしてプログラムを実行しているため、操作を実行して数学的な結果を置き換える必要がありstdoutます。ファイルのリダイレクト、それらのファイルを開く、操作の実行、結果の抽出、交換。私にsedは、すべてを1行で実行するのが最善のようです。 私はさまざまな方法で入力と出力の両方をキャストしようとしました $ echo 12 | sed 's/[0-9]*/int(&+3)/' $ echo 12 | sed 's/[0-9]*/\int(&+3)/' $ echo 12 | sed 's/[0-9]*/\int(&+3)/' しかし、結果は常に2番目のフィールドの印刷でした。
40 sed  math 



2
CSVファイルを処理するために1つのスクリプトに複数のsedコマンドを結合します
このようなCSVファイルを持っている: HEADER "first, column"|"second "some random quotes" column"|"third ol' column" FOOTER 次のような結果を探します: HEADER first, column|second "some random quotes" column|third ol' column 言い換えると、「FOOTER」を削除すると、開始、終了、および前後に引用符が付きます。 これまでのところ、このコードは動作します: sed '/FOOTER/d' csv > csv1 | #remove FOOTER sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning sed 's/\"$//' csv2 > csv3 | #remove quote …
34 sed  csv 



4
ファイルの最初のnバイトを削除します
私には極端な問題があり、想像できるすべての解決策は複雑です。私のUNIX / Linuxの経験によると、簡単な方法が必要です。 の各ファイルの最初の31バイトを削除したい/foo/。各ファイルは十分な長さです。まあ、誰かが私に想像を絶する驚くほど簡単な解決策を提供してくれると確信しています。たぶんawk?


10
パターン(マーカー)の前にファイルのコンテンツを別のファイルに挿入する方法は?
File1 内容: line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" File2 内容: line1-file2 "25" line2-file2 "24" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" perl / shellスクリプトの実行後、File2コンテンツは次のようになります。 line1-file2 "25" line2-file2 "24" line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" すなわち、「ポインタ」を含む行の前にFile1in の内容を貼り付けFile2ます。

3
sed-複数の連続した置換を行うが、ファイルを1回だけ処理する方法
連続する必要があるいくつかの置換を行っている場合、例えば sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb sed -i 's/\.should/\.to/' t1_spec.rb sed -i 's/==/eq/' t1_spec.rb ファイルを4回通過するのではなく、t1_spec.fileを1回だけ通過し、各行の4つの置換を行うこれを行うより良い方法はありますか?
31 sed 



6
シェルコマンドを使用して、テキストファイルの最初の列と最後の列のみを表示する方法は?
テキストファイルの最初の列と最後の列のみを表示するためにsedコマンドを使用する方法を理解するには、助けが必要です。これが私がこれまでコラム1に持っていたものです。 cat logfile | sed 's/\|/ /'|awk '{print $1}' 最後の列を表示するための私の弱い試みは次のとおりでした: cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}' ただし、これは最初の列と最後の列を取り、それらを1つのリストにマージします。sedおよびawkコマンドで最初の列と最後の列を明確に印刷する方法はありますか? サンプル入力: foo|dog|cat|mouse|lion|ox|tiger|bar
30 shell  sed  awk 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.