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

Sed(Stream EDitor)は、POSIX環境用のコマンドラインエディターです。sedは、編集スクリプトに従って1つ以上のファイルを処理し、結果を標準出力に書き込みます。Bell Labsで作成され、70年代半ばから存在しています。

10
sedが\ tをタブとして認識しないのはなぜですか?
sed "s/\(.*\)/\t\1/" $filename > $sedTmpFile && mv $sedTmpFile $filename このsedスクリプトtabでは、すべての行の前にが挿入されることを期待していますが、$filenameそうではありません。何らかの理由でt代わりにを挿入しています。
105 regex  bash  sed 

6
sedまたはawk:パターンに続くn行を削除
sed(または同様のツール-awkなど)でパターンと数値範囲をどのように混在させるのですか?私がしたいことは、ファイル内の特定の行を照合し、続行する前に次のn行を削除し、それをパイプラインの一部として実行することです。
105 unix  sed  awk 

4
sedエラー:「 `s 'コマンドのRHSでの無効な参照\ 1」
mavenのcolorizeスクリプトのコアとしていくつかの置換コマンドを実行します。sedコマンドの1つは、ここで説明するように、シェルで機能する正規表現を使用します。現在の(動作していない)実装はここにあります。 コマンドのバリアントの1つをスクリプトに含めると、さまざまな動作が発生します。 バリエーション1: $ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g" スクリプトに適応: -re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \ エラー:シェルは、と入力した場合と同じ情報を出力します$ sed。奇妙な!? バリエーション2: $ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g" スクリプトに適応: -e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \ エラー: sed:-e式#7、char 59: `s 'コマンドのRHSの参照\ 1が無効です
103 regex  sed  substitution 

11
sed、awk、またはgawkを使用して、一致するものだけを印刷する方法
sed、awk、またはgawkを使用して検索と置換などを行う方法について、多くの例とmanページを参照しています。 しかし、私の場合、特定の値を抽出するためにテキストファイルに対して実行する正規表現があります。検索と置換を行いたくありません。これはbashから呼び出されています。例を使用してみましょう: 正規表現の例: .*abc([0-9]+)xyz.* 入力ファイルの例: a b c abc12345xyz a b c これは簡単に聞こえますが、sed / awk / gawkを正しく呼び出す方法がわかりません。私が望んでいたことは、私のbashスクリプト内からです: myvalue=$( sed <...something...> input.txt ) 私が試したことは次のとおりです。 sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file sed -n 's/.*([0-9]).*/\\1/g' example.txt # extracts nothing
100 regex  unix  sed  awk  gawk 

6
スラッシュを含む変数をsedに渡す方法
スラッシュを含む変数をパターンとしてどのように渡しsedますか? たとえば、次の変数があるとします。 var="/Users/Documents/name/file" 私はそれを次のsedように渡したいです: sed "s/$var/replace/g" "$file" ただし、エラーが発生します。どうすれば問題を回避できますか?
100 bash  sed 

8
sed初心者:フォルダー内のすべての出現箇所の変更
フォルダー(およびそのサブフォルダー)内のすべてのファイルを正規表現で検索して置換する必要があります。それを行うためのLinuxシェルコマンドは何でしょうか? たとえば、これをすべてのファイルに対して実行し、古いファイルを新しい置き換えられたテキストで上書きします。 sed 's/old text/new text/g'
98 regex  linux  shell  sed 

6
sedとgrep / egrepを使用した検索と置換
次のegrep -Rように、約10のユニオンを含む正規表現を続けて使用しています .jpg | .png | .gif。これはうまくいきます。今、見つかったすべての文字列を.bmp のようなものを考えていました egrep -lR "\.jpg|\.png|\.gif" . | sed "s/some_expression/.jpg/" file_it_came_form したがって、ここでの問題は、同様のユニオン正規表現sedをどのように実行するか、および入力を取得したファイルへの変更を保存するように指示する方法です。
97 regex  sed  grep 

6
Mac OS 10.10以降でGNU sedを使用する方法、「brew install --default-names」はサポートされなくなりました
Mac OS 10.10.3では、次のように入力してgnu-sedをインストールしました。 brew install gnu-sed --default-names もう一度入力すると、次のメッセージが表示されます。 gnu-sed-4.2.2はすでにインストールされています ただし、システムを再起動してターミナルを再起動した後でも、sedのGNUバージョンを使用できません。例えば: echo a | sed ’s_A_X_i’ 戻り値:置換コマンド 'i'の不正なフラグ GNUバージョンを機能させるにはどうすればよいですか?$ PATH変数のパスは次のとおりです。 /Users/WN/-myUnix /opt/local/bin /opt/local/sbin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /Applications/calibre.app/Contents/MacOS /opt/ImageMagick/bin /usr/texbin 私の質問が明白に思える場合は申し訳ありませんが、私は自分でシェルスクリプトを学習しており、UNIXプログラムがどのようにインストールされるのかまだ完全には理解していません。損傷や不要な混乱を引き起こすことなく、MacでGNU準拠のコマンド(この場合はsedですが、すぐに他のコマンドも必要になります)を使用するための助けがあれば、大いに感謝します。
95 macos  bash  sed  homebrew  gnu 

5
sedを使用して文字列からテキストを抽出する方法は?
私のサンプル文字列は次のとおりです: This is 02G05 a test string 20-Jul-2012 今、上記の文字列から抽出したいです02G05。そのために私はsedで次の正規表現を試しました $ echo "This is 02G05 a test string 20-Jul-2012" | sed -n '/\d+G\d+/p' しかし、上記のコマンドは何も出力せず、私が信じる理由は、sedに指定したパターンに対して何も一致させることができないためです。 だから、私の質問は私がここで何が間違っているのか、そしてそれをどのように修正するのかです。 上記の文字列とパターンをpythonで試すと、結果が得られます >>> re.findall(r'\d+G\d+',st) ['02G05'] >>>
95 regex  bash  sed 


3
リテラル文字列でsed-入力ファイルではありません
これは簡単なはずです。入力ファイルではなく、リテラル文字列に対してsedを実行したいのです。なぜかと思うと、それは、たとえばテキストデータではなく、変数に格納されている値を編集するためです。 私がする時: sed 's/,/','/g' "A,B,C" ここで、A、B、Cは、Aに変更したいリテラルです '、' B '、' C 私は得る Can't open A,B,C A、B、Cがファイルであると考えるかのように。 エコーするためにそれをパイプで試しました: echo "A,B,C" | sed 's/,/','/g' プロンプトが表示されます。 それを行う正しい方法は何ですか?
92 linux  unix  sed 


2
bashで空白を(アンダースコア)_で置き換える最も簡単な方法[終了]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 10年前に閉鎖。 最近、XenServerでVMを解析する小さなスクリプトを作成する必要がありました。VMの名前はWindows XPやWindows Server 2008などでほとんどが空白であるので、それらの空白を削除してアンダースコア_に置き換える必要がありました。文字列操作に関しては、sedを使用してこれを行う簡単な解決策が見つかりました。 echo "This is just a test" | sed -e 's/ /_/g' 戻り値 This_is_just_a_test これを達成する他の方法はありますか?
91 bash  sed 

5
一致しない行を無視してsedしました
sedある式に従ってフィルターの一致する行を作成し、一致しない行を印刷せずに無視するにはどうすればよいですか? 実際の例として、私scalacは一連のファイルで(Scalaコンパイラーを)実行し、その-verbose出力から.class作成されたファイルを読み取ります。scalac -verboseたくさんのメッセージを出力しますが、私たちはフォームのメッセージにのみ興味があります[wrote some-class-name.class]。私が現在やっていることはこれです(|&stashrを次のプログラムにパイプするためのbash 4.0の方法です): $ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/' これにより、対象のメッセージからファイル名が抽出されますが、他のすべてのメッセージは変更されずに通過します。もちろん、代わりにこれを行うことができます: $ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' | sed 's/^\[wrote \(.*\.class\)\]$/\1/' これは機能しますが、実際の問題を回避するのとよく似てsedいます。つまり、入力から一致しない行を無視するように指示する方法です。それでは、どうすればよいでしょうか。
91 sed 

2
jqを使用してJSON文字列を解析します
私は次のjqようなJSON構造を解析しようとしています: { "a" : 1, "b" : 2, "c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n" } つまり、JSONの要素は、エスケープされたjsonを含む文字列です。 だから、私はの線に沿って何かを持っています $ jq [.c] myFile.json | jq [.id] しかし、それはでクラッシュします jq: error: Cannot index string with string これは、.cの出力が文字列であり、JSONではないためです。jqにこの文字列を解析させるにはどうすればよいですか? 私の最初のソリューションは、すべてのエスケープ文字を置き換えるためにsedを使用することです(\":\"、\",\"および\")が、厄介者のことを、私はに組み込まれている方法がありますと仮定しjq、これを行うには? ありがとう! 編集:また、ここで利用可能なjqバージョンは次のとおりです。 $ jq --version jq version 1.3 必要に応じて更新できると思います。
91 json  string  sed  escaping  jq 

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