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

「sed」(「ストリームエディタ」)は、テキストファイルを解析および変換するUnixユーティリティです。

1
sedが一致しない行を省略する方法は?
次の例でsedは、aまたはで始まる行に一致し、cその行の最初の文字(aまたはc)を出力します。 $ echo "ag bh ci dj ek fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'. output: a bh c dj ek fl ただし、パターンと一致しない行も印刷されます。sedパターンに一致しない行を除外するにはどうすればよいですか?grep(以下のように)と組み合わせることで目的の効果を得るsedことができますが、「それだけ」で実現できるか知りたいです。 $ echo "ag bh ci dj ek fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/' output: a c

2
特別なテキストをsedに置き換えますか?
私はWindows XPでCMDを使って特殊テキストをSedに置き換えています。私はこのような特殊文字を置き換えるためにこのコマンドを使用しています $ or * : sed -i "s/\*/123/g;" 1.txt しかし、どのように私はこの文字列を置き換えるために使用する必要があります ciao! 私のテキストファイルに?可能です? \\ \\\ "" sed.exe -i "s/{\*)(//123/ sed -i "s/\\/123/g;" 1.txt 私が持っているので前のコマンドは動作しません \、 " そしてsedが正規表現を作るのに使うその他の特別な文字列

2
検索してsedに置き換えます。元の行も保持します
私は持っています param1='123' をお願いします param1='123' param2=123 123は私がこれを実行したいファイルの間で変わるでしょう。 私は使用してparam2を得ることができます sed -i "s/param1=\([0-9]\+\)/param2='\1'/g" '{}' \; しかし、それから私はparam1を失います。 私はまた使用して行param2を追加することができます sed -i "param1='\([0-9]\+\)';/a \param2=\1; しかし、パターンは認識されていないと私は終わる param2=1 これら2つのコマンドを組み合わせる方法、またはこれを機能させる別の方法はありますか? どうもありがとう!

1
なぜsedはエコーからの直接出力でのみ動作するのですか
AndroidアプリのUI描画時間を取得するためのシェルコマンドがあります(この質問には実際には関係ありません)。とにかく、出力は次のようになります I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: [time] ここで、[時間]の形式である+###msか、+#s###ms(ここでも、関係がありません)。 コマンドは次のとおりです。 adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//' echo出力を直接表示するために使用すると、期待どおりに機能します: $ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//' > 233 $ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s233ms' | …
3 bash  regex  grep  sed 

2
コマンドライン経由で「nvidia-settings」のコマンド出力を取得する方法は?
手元のケース: nvidia-settings -q all | grep 'Attribute。* GPUCoreTemp' 与える: Attribute 'GPUCoreTemp' (system5:0.0) 58. Attribute 'GPUCoreTemp' (system5:0[gpu:0]): 58. それから私はそれを作ります: nvidia-settings -q all | grep 'Attribute.*GPUCoreTemp' | sed -e 's/.* //' 私に与えます: 58. 58. しかし、私は最初のものだけが欲しい...これを達成する方法?

5
行番号の長いリストに基づいて行を除外する
ファイルに入れたくない行番号の長いリスト(35389208)があります。行番号とは、ファイル内の行(たとえば、行277)を意味します。不要な行番号のリストは次のようになります。 277 278 279 280 289 290 291 292 321 322 .... これらの行番号をファイルから除外する最良の方法は何ですか?perl sedまたはawk(またはその他)のソリューション。
3 command-line  sed  perl  awk 

2
すべてのファイルでimages \(。*)をimages / \ 1に置き換えますか?
私はたくさんのHTMLファイルを持っています、そしてすべてのimgタグはスラッシュを間違った方法で持っています! これが例です(コードの1行を除いて、見やすくするためにここで分割しています) <a href=index.html><img src="images\homereg.png" /></a> <img src="images\spacer.png" /> <a href=dogs.html><img src="images\dogsreg.png" /></a> <img src="images\spacer.png" /> <a href=litters.html><img src="images\littersreg.png" /></a> <img src="images\spacer.png" /> <a href=bredby.html><img src="images\bredbyreg.png" /></a> <img src="images\spacer.png" /> <a href=contact.html><img src="images\contactreg.png" /></a> 私がこれまでに試したことに対する私の問題は、sedが欲張っていることです。何かのようなもの sed -i 's|images\\\(.*\)\"|images/\1\"|g' * 1行に1つ置き換えられますが、マッチングが多すぎます。私は他のことを試したが、これと同じ方向に沿っている。 最も簡単な解決策は何ですか?私はsedに限ったことではありません、私はそれを最もよく知っているので、それが私が試したことです。
2 linux  sed 

1
個々の部品は機能しますが、それらを通してデータをパイプ処理すると壊れます
一言で言えば、私はpingのための別の出力を作成しようとしています。それは私がやろうとしていることのためにもっとうまくいきます。そのために、私はpingの出力をsedにパイプ処理し、ミリ秒を除くすべてを削除します。最後の部分はPythonで書かれていて、それは出力を作成します。 これがコードです: ping google.com | sed '/^[^=]*$/d;s/^[^=]*=[^=]*=[^=]*=//;s/ ms//' | python3 -c 'while True: l = [float(input()) for _ in range(10)] m = sum(l) / len(l) n = sum(abs(i - m) for i in l) / len(l) print("{}\t{}".format(m, n))' フィッシュアンドバッシュで実行しようとしましたが、うまくいきません(=>出力が得られません)。しかし、個々の部品は機能します ping google.com | sed '/^[^=]*$/d;s/^[^=]*=[^=]*=[^=]*=//;s/ ms//' 期待される出力が得られます。私がcatを使ってファイルをそれにパイプすると、Pythonスクリプトは期待される出力を生成します。
2 unix  shell  python  sed 

1
Sed - 変数を使用して複数の特殊文字を含む行を削除する
次のファイルがあります。 test.txt を含む: 3;/var/tmp/test.mp4 3;/var/tmp/test2.mp4 1;/var/tmp/test3.mp4 たとえば、削除する必要があります」 3; /var/tmp/test2.mp4 msgstr "変数を使っています。 string="3;/var/tmp/test2.mp4" sed -i '#$string#d' test.txt エラーをスローしませんが、行を削除できないようです... 任意の助けがいただければ幸いです。 ありがとうございます。
2 linux  sed 

2
Sedの文字制限と置換/文字をバイパスしますか?
Windows XPを使用しています。 長さが200,000文字の単語を置き換えたいのですが、CMDに問題があります(入力行が長すぎます)。Linuxでは、端末に同じ長さの問題がありますか? 多くの単語を他の多くの単語に置き換えると/、CMDが出力エラーを出すため、文字を置き換えることができません。 この問題を回避する解決策はありますか?
2 regex  sed 

3
一致する各行の先頭にスペースを追加します
たとえば、最初に開始する行があり、それが前の行と並ぶために必要な場合、どうすれば最も効果的にそれを行うことができますか。 preceeding line line I need to add spaces to したがって、次のようになります。 predeeding line where it needs to start. 開始する必要がある場所からちょうど8スペース離れています。vim、awk、sed、または別のツールでこれを行うにはどうすればよいですか? その他の要件/注意: これらの行はファイル内で複数回発生し、100〜500行の間でのみ変更を行います。
2 vim  sed  awk  text-editing 

2
2つのパターンの間に文字列を挿入します
次のような名前のファイルを変更したい: d1-a2_A1_B1.txt abcd_A90_B2.txt 私は挿入する場所_FOO最初の間にある_A[0-9]\+と_B[0-9]そのファイル名になり d1-a2_A1_FOO_B1.txt abcd_A90_FOO_B2.txt しかし、私の正規表現は機能しません: for f in $(ls); do mv $f \`echo $f | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/\`; done 私は単一の文字列で試しました: echo abcd_A90_B2.txt | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/ OK:これはうまくいきました: echo abcd_A90_B2.txt | sed -e 's/\(_A[0-9]\+\)\(_B[0-9]\)/\1_FOO\2/'
2 linux  bash  regex  sed 

1
grep、sed、またはawkを使ってその間にある単語を見つけますか? .el7までパッケージ名を抽出できるようにしたい
私はスクリプト(bash /コマンドライン)を書いていて、.el7までパッケージ名を抽出できるようにしたいです。 x=dbus-sharp (パッケージ名の例 - 変更されています) テキストファイルの例: Building dbus-sharp-0.7.0-11.fc22 for epel7 Created task: 7970206 ... 0 free 1 open 1 done 0 failed 7970225 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, ppc64): free 7970223 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, x86_64): open (buildhw-03.phx2.fedoraproject.org) ... 基本的に今欲しい y=dbus-sharp-0.7.0-11.el7 grep、sed、またはawkを使用する必要があるかどうかは関係ありません。 私は似たような解決策のために何の幸運なグーグルも持っていませんでした。 私が試した例: [me@h dbus-sharp]$ echo "Here is a String" | grep -Po …
1 bash  grep  sed  awk 

2
誤ってsedコマンドを実行しましたが、「s」の不明なオプションは置換が行われなかったことを意味しますか
私は誤ってsedコマンドを実行しました: find ./ -type f -exec sed -i 's/http:\/\/i.po.st\/static\/v3\/img\/set-24.png/https:\/\/i.po.st\/static/v3/img/set-24.png/gI' {} \; 脱出が完了する前に / エラーが発生しました: sed: -e expression #1, char 75: unknown option to `s' sed: -e expression #1, char 75: unknown option to `s' 変な置換は起こらなかった?
1 linux  bash  sed 

4
空白のsed除去
私はそれを見つけるsedことが多いが、パターン照合空白に失敗しました。以下の例を検討してください。 echo 'A B C' | sed 's/[ \t]*//g' ABC echo -e 'A\tB\tC' | sed 's/[ \t]*//g' A B C perl -e 'print "A B C\n"' | sed 's/[ \t]*//g' ABC perl -e 'print "A\tB\tC\n"' | sed 's/[ \t]*//g' A B C 誰かがsed時々空白のマッチングに失敗する理由を説明してもらえますか?
1 sed  perl  whitespace 

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