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

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


7
sedを使用してファイルから1行の一部を抽出します
ファイルから1行の一部を読みたい。例えば: POP3_SERVER_NAME = localhost localhostsedを使用してのみ返されます。 このテキストは3行目にあります。私はこれをして行を抽出します: sed -n '3p' installation.sh localhost一部のみを抽出するにはどうすればよいですか?
18 sed 

5
重複を削除しながら2つのリストをマージする
Busybox(OpenWRT)を使用した組み込みLinuxシステムがあるため、コマンドが制限されています。次のような2つのファイルがあります。 最初のファイル aaaaaa bbbbbb cccccc mmmmmm nnnnnn 2番目のファイル mmmmmm nnnnnn yyyyyy zzzzzz これら2つのリストを1つのファイルにマージし、重複を削除する必要があります。 私たちは偉大なを使用して取得して(スペースが限られている)の差分を持っていないawk、sedとgrep(または標準Busyboxのインスタンスに含まれている場合があります他のツール)。次のようなマージファイルに移動します。 command1 > mylist.merge command2 mylist.merge > originallist 大丈夫です。単一行のコマンドである必要はありません。 私が使用しているBusyboxのインスタンスで現在定義されている関数(デフォルトOpenWRT):[、[[、arping、ash、awk、basename、brctl、bunzip2、bzcat、cat、chgrp、chmod、chown、chroot、clear、cmp、 cp、crond、crontab、cut、date、dd、df、dirname、dmesg、du、echo、egrep、env、expr、false、fgrep、find、free、fsync、grep、gunzip、gzip、halt、head、hexdump、 hostid、hwclock、id、ifconfig、init、insmod、kill、killall、klogd、less、ln、lock、logger、logread、ls、lsmod、md5sum、mkdir、mkfifo、mknod、mktemp、mount、mv、nc、netmsg、 netstat、nice、nslookup、ntpd、passwd、pgrep、pidof、ping、ping6、pivot_root、pkill、poweroff、printf、ps、pwd、reboot、reset、rm、rmdir、rmmod、route、sed、seq、sh、sleep、 sort、start-stop-daemon、strings、switch_root、sync、sysctl、syslogd、tail、tar、tee、telnet、telnetd、test、time、top、touch、tr、traceroute、true、udhcpc、umount、uname、uniq、uptime、vconfig、vi、watchdog、wc、wget、which、xargs、yes、zcat
18 bash  grep  sed  awk  busybox 

2
sedを使用して文字<>を削除します
次のような行を含むファイルがあります。 ... ... &lt;230948203[234]&gt;, ... ... &lt;234[24]&gt;, ... .. 私は文字を削除するsedを使用したい&lt; ,と&gt;すべての行から 使用してみましたsed 's/&lt;&gt;,//g'が、機能しませんでした(何も変更しませんでした)。これらの特殊文字をエスケープする必要がありますか。単一のsedコマンドを使用して複数の文字を削除することは可能ですか?
18 sed 

1
grep、less、awk、sedを使用する場合[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 閉じた3年前。 私はLinuxの世界に入りつつあり、職場ではgrepますます使用しています。そうすることで、私が望むものに十分でない場合があることを理解しています。 私はgrep数日前に苦労していましたが、Linuxの上級管理者である私の同僚がを使用するように言われましたawk。どれだけ早く結果を得たかに驚いた。 だから私の質問は、いつあなたが一方を他方の上に使うことを選ぶのですか?一緒に仕事をしgrepたり時間awkを節約したり、時間を節約したりする前に、どんな質問を自問することができますか?
17 awk  sed  grep  less 



1
フィールドの値が3以下の行を削除します-sedまたはawk?
8番目のフィールド(列)の値が2以下のすべての行を削除する必要があります。 私のデータは次のようになります。 12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8 01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1 01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4 01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6 awkを使用すると、必要な値を取り除いて別のファイルに出力できること、そしてsedが現在のファイルを編集することを理解しています。どちらの場合でも、元のファイルを保持する必要があります。 注:ソリューションについて詳細な説明を提供してください。コマンドを記述するだけでは不十分です。提案に注釈を付けてください。 さらに注意:データにはヘッダー行があるため、ほとんどの場合、ソリューションには次のことが必要です。 awk 'FNR&gt; 1' 私は考えます?
17 shell  shell-script  sed  awk  grep 

3
sedが余分な改行文字を追加しないようにする方法
次の2つのsedコマンドを実行しています。最初の行は、必要な場所に改行文字を追加し、2番目の行は、必要な場所に改行文字を追加しますが、前に存在しなかったファイルの末尾に余分な文字を追加します。 sed -e 's|\&lt;LIST_G_STATEMENT&gt;|&amp;\ |g' ${XMLDIR}/statement_tmp_1.xml &gt; ${XMLDIR}/statement_tmp_2.xml sed -e 's|\&lt;/LIST_G_STATEMENT&gt;|&amp;\ |g' ${XMLDIR}/statement_tmp_2.xml &gt; ${XMLDIR}/statement_tmp_3.xml od -c3つのファイルすべてで使用すると、次の出力が得られます。 statement_tmp_1.xml(\nファイルの最後にありません) 1314700 T A T E M E N T &gt; &lt; / L I S T _ 1314720 G _ S T A T E M E N T &gt; &lt; / …
17 sed 

7
各行を複数回繰り返します
ファイル内の各行を一定回数繰り返したいと思います。 たとえば、各行を4回繰り返します。 a b c になる: a a a a b b b b c c c c 私はいくつかの検索を行いましたが、逆の行に沿って多くの質問と回答があります。たとえば、重複する行を単一の行にマージしたり、再度印刷して行を2倍にしたりします。 Cでこれを行うのは簡単ですが、ネイティブコマンドについてもっと詳しく知りたいので、このような1回限りのスローアウェイにいつも頼る必要はありません。

4
先頭の空白なしでgrepを実行するにはどうすればよいですか?
私は大規模なコードベースを熟読していますが、主要な空白と集計は非常に迷惑なようです。それを取り除く方法はありますか? grep -R "something" ./ たとえば、次の代わりに: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgsomethingdrfg bar/bar.cpp: 1234edwssomethingczd 私は次のようなものを得たいです: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgdsomethingrfg bar/bar.cpp: 1234edwssomethingczd またはそれ以上: foo/bar.cpp: qwertyuisomethingooi foo/bar/baz.h: 43rfsgdrsomethingfg bar/bar.cpp: 1234edwssomethingczd

3
ファイル内の複数行の文字列を置換
ある複数行の文字列を別の複数行の文字列で置き換えることにより、更新したいファイルがいくつかあります。以下の線に沿ったもの: * Some text, * something else * another thing そして、私はそれを次のものに置き換えたいです: * This is completely * different text 結果は、置換後、テキストの最初のブロックを含むファイルに2番目の文字列が含まれるようになります(ファイルの残りの部分は変更されません)。 問題の一部は、ファイルシステムで更新するファイルのリストを見つける必要があることです。私はそのためにgrepを使用することができます(複数行の文字列を使用するのは簡単ではありませんが)sedでパイプすることができますか? これを行う簡単な方法はありますか?Sedはオプションですが、\ nなどを追加する必要があるため厄介です。「このファイルから入力を取得し、それらのファイルで一致させてから、この他のファイルのコンテンツで置き換える」と言う方法はありますか?必要に応じてpythonを使用できますが、すばやく簡単なものが必要なので、利用可能なユーティリティがある場合は、独自のスクリプト(方法を知っています)を作成するよりもむしろそれを使用します。

12
重複行をペアで削除しますか?
今日、このユースケースに出会いました。これは、一見シンプルなようだが、と周りいじるsort、uniq、sedそしてawkそれは自明だことを明らかにしました。 重複行のすべてのペアを削除するにはどうすればよいですか?つまり、指定された行の重複が偶数個ある場合は、それらをすべて削除します。重複する行の数が奇数の場合、1つを除くすべてを削除します。(ソートされた入力を想定できます。) クリーンでエレガントなソリューションが望ましいです。 入力例: a a a b b c c c c d d d d d e 出力例: a d e

3
sedを使用して正規表現キャプチャグループのコンテンツを置き換える
私はnginx.confファイルをプログラムで編集しようとしていますが、これには次のような行が含まれています: access_log /var/log/nginx/access.log; 私はこのようになりたい: access_log /dev/stdout; 正規表現^\s*access_log([^;]*);はキャプチャ/var/log/nginx/access.logグループの一部をキャプチャすると信じていますが、キャプチャグループをsedに正しく置き換える方法がわかりませんか? 私はもう試した echo " access_log /var/log/nginx/access.log;" | sed 's/^\s*access_log([^;]*);/\1\\\/dev\\\/stdout/' しかし、私はエラーが発生しています: sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS 私が試してみるとsed -rエラーはありませんが、出力は私が期待するものではありません: /var/log/nginx/access.log\/dev\/stdout 私は「access_log /var/log/nginx/access.log;」を直接検索しないように、キャプチャグループとその他について賢くしようとしています。配布によってデフォルトのログファイルの場所が変更された場合。
16 sed 

8
巨大なファイルの改行を含む文字列を置換
メモリー効率のよい方法で文字列を「バイナリ」検索/置換する非行ベースのツールを知っている人はいますか?この質問もご覧ください。 + 2GBのテキストファイルがあり、これと同じように処理したいと思います。 sed -e 's/&gt;\n/&gt;/g' つまり、の後にあるすべての改行を削除したいの&gt;ですが、他の場所ではなく、除外しtr -dます。 このコマンド(同様の質問の答えから得た)は次のように失敗しcouldn't re-allocate memoryます: sed --unbuffered ':a;N;$!ba;s/&gt;\n/&gt;/g' だから、Cに頼らずに他の方法はありますか?私はperlが嫌いですが、この場合は例外を作りたいです:-) データ内に出現しない文字がわからないので、一時的に\n別の文字に置き換えることは可能な限り避けたいものです。 良いアイデアはありますか?

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