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

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

7
最後のx個の出現を除く文字を置き換えます
次のようなIPに関連付けられた一連のホスト名を持つファイルがあります。 x-cluster-front-1 192.168.1.2 x-cluster-front-2 192.158.1.10 y-cluster-back-1 10.1.11.99 y-cluster-back-2 10.1.157.38 int.test.example.com 59.2.86.3 super.awesome.machine 123.234.15.6 次のようにしたい: x-cluster-front-1 192.168.1.2 x-cluster-front-2 192.158.1.10 y-cluster-back-1 10.1.11.99 y-cluster-back-2 10.1.157.38 int-test-example-com 59.2.86.3 super-awesome-machine 123.234.15.6 どうすれば交換できますか?(ドット)最初の列から-(ハイフン)を付けて、2番目の列によるソートを容易にしますか?最初のスペースまでsedを使用してドットを置き換えるか、最後の3つを除くすべてのドットを置き換えることを考えていましたが、正規表現とsedを理解できません。単純な置換を実行できますが、これは私の頭の上の方法です! これは、私がbashで書いている大きなスクリプトの一部です。この部分で行き詰まっています。


1
パターンが見つからない場合にsedを失敗させるオプションはありますか?
一部のファイルでいくつかのパターンを見つけて置き換える必要がありますが、パターンが見つからない場合は1または何かを返す必要があります。 sedだけでこれを行うことはできますか、または別のコマンドでパターンが存在するかどうかを確認する必要がありますか? 助言がありますか?
9 sed 

1
sedまたはawkの複数の行の置き換え[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前休業。 私はsedまたはawkを使用してsmbファイルの5行を置き換えようとしていますが、改行を処理する方法がわかりません。
9 sed  awk  scripting  perl 

6
ファイルの特定のコンテンツを取得する
だから私はそれらについて聞いたのでこの問題のためのツールが存在することを知っていますが、それらが何であるかはわかりません。 / etc / passwd内のユーザー名以外のすべてのデータを除外するようなことをしたいのですが。 たとえば、次のファイルからuser1、user2、およびuser3を取得したいとします。この場合のロジックは、「ファイルの各行の最初の ':'までテキストを取得する」です。 user1:x:1:4 user2:x:2:5 user3:x:3:6 出力は次のようになります。 user1 user2 user3
9 files  sed  awk  cut 

3
ファイルの最後から最後のカンマ区切りを削除するにはどうすればよいですか?
Linuxでファイルから最後のカンマ区切りを削除するにはどうすればよいですか? ファイルの例: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536", 予期された結果: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536"

3
sedまたはexを使用して、ブロック(複数行コード)を新しいテキストブロック(コード)に置き換えるにはどうすればよいですか?
ファイル内のテキスト(シェルスクリプトコード)の大きなブロックを別のテキストブロックに置き換える必要があります。 sedを使用して複数行の文字列を置き換えるにはどうすればよいですか?で答え antakとマルチラインを置き換えることで答えブルースEdiger しかし、私はそれらを使用するのにいくつかの問題を抱えています。 antakは既に回答で言及していますが、ファイル全体(1h;2,$H;$!d;g;)をバッファにストリーミングすることは、メモリが過負荷になるため、大きなファイルにはお勧めできません。 sedブロック機能を使用して、ブロック外のテキストを変更せずに保持できることを知っています。この機能を使いたい。でも使ったら sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename ストリームごとに新しいテキスト(コード)を繰り返し挿入します。したがって、視覚的ブロックを1つのストリームとして作成する必要があります。以前のantakによって提案されたものと同様のものを使用しますが、ブロックに対して(ファイル全体ではなく)行います。 Bruce Edigerで述べたように、(ドット)exで始まる追加機能を試すことはできますが、新しいテキスト(コード)にはドットで始まる行が含まれており、追加構文のドットと見なすことができます。この状況でどのように使用できますか?a. ex'のdd行数'は複数の行を削除する可能性がありますが、/ marker1 /と/ marker2 /の間に固定されていない(可変の)行数のブロックがある場合、新しいテキスト(コード)で置き換える場合、方法それ ?
9 sed  ex 

1
sedの〜の解釈
私は最近、sedを学んでいます。何よりも私を混乱させるこのチルダ「〜」があります。 たとえば、コマンド sed -n '1~2 w output.txt' input.txt 奇数番号の行を出力しています(ファイルoutput.txtに)。 同じチュートリアルでは、1から2までの行をスキップし、次に使用する場合に備えて、行番号2の次の行の印刷を開始することも指定されています sed -n '1~2 p' input.txt このチルダの絶対的な解釈は何ですか?
9 sed 

7
マイナス記号を維持しながら特定の列の数値を削除しますか?
次のデータフレームが水平方向と垂直方向に無期限に続き、奇数列にのみ負の数が表示されます。 -1 2 3 4 -5 9 2 3 -4 5 -6 11 そして、2番目、4番目、6番目の完全な列(またはすべての偶数列)と、1番目、3番目、および5番目(またはすべての奇数列)からのみマイナス記号が必要なので、これを取得します。 - 2 4 - 9 3 - 5 - 11 そして最終的にこれで終わります: -2 4 -9 3 -5 -11 したがって、変更されていない偶数列と奇数列の値が必要です。負の値がある場合は-を保持し、正の値がある場合は破棄します。 これをawk / sedで行う方法はありますか? これは私が得る限り遠いです: awk '{ for (i=2;i<=NF;i+=2) $i="" }1' FILE.txt | sed 's/[0-9,.]*//g'



2
「sed」内でコマンドを実行する
テキストファイルに保存されたランダムメモリアドレスのリストがありsedます。それらを取り出してデコードし、ファイルに保存する必要があります。ただし、実行しようとしているデコード操作は、少し前に作成したC ++プログラムで処理されます。現在直面している問題は、sedコマンド内でC ++を実行することです。つまり、デコードが必要な部分を後方参照し、それをC ++プログラムの引数として使用したいのです。私は次のコマンドを書きました: cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g'; コマンドを実行しないというこの投稿の回答を読む機会があった前にsed。sedコマンドの実行を許可しないのは本当ですか?もしそうなら、私が書いたコマンドが有効なsedシーケンスであると仮定すると、どのようにそれを書けperlますか?

3
sedを使用して文字列の一部を抽出する
ls lib/oracle-11.2.0.3.0.txt | sed 's/lib.\([oracle.*]\)\.txt/\1/' .txtまでのoracle部分だけでなく、文字列全体を提供しています。 次のようにawkを使用してそれを行うことができますが、sedが目的の結果をもたらさない理由がわかりません。 echo "lib/oracle-11.2.0.3.0.txt" | awk -F/ '{print substr($2,1,index($0,".txt")-1);}'

4
sedが終了していない「s」に関するエラーを表示するのはなぜですか?
bashスクリプトに一連のsed置換があり、終了していない「s」コマンドに関するエラーが発生します。sed行は次​​のようになります。 sed -n -e "s/TMPFOO1/$FOO1/" -e "s/TMPFOO2/$FOO2/" -e "s/TMPFOO3/$FOO3/" -e "s/TMPFOO4/$FOO4/" -e "s/TMPFOO5/$FOO5/" /home/foo/template > /home/foo/template/finishedresult しかし、何らかの理由で、bashはこれを好みません。 sed: -e expression #4, char 69: unterminated `s' command ここで何が欠けていますか?SEDに変数を入力させるにはどうすればよいですか?それらはすべて終了しているように見えます。

2
Sed:数字を置き換える
Ubuntuをインストールまたはアップグレードするときに使用するインストールスクリプトを記述しようとしています。修正に問題がありlogrotate.dます: /var/log/ufw.log { rotate 7 weekly missingok notifempty compress delaycompress sharedscripts postrotate reload rsyslog >/dev/null 2>&1 || true endscript } に変更rotate nnnしたいですrotate 99。nnnが任意の桁数(通常は1または2)であっても機能しますが、postrotate回線には影響しません。 私はこれら2つを試しましたが、必要なものはどちらも実行していません(nnnを1、2、または3桁でテストしました)。 sudo sed 's/rotate[0-9]*/rotate 99/' /etc/logrotate.d/ufw sudo sed 's/^rotate[0-9]/rotate 99/' /etc/logrotate.d/ufw

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