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

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

3
特定の文字列を含む行のみをsedする方法は?
入力: Select ASDF 325 sdfg sdflk lk Select TRG 46sdg rasdftz fsgs 45 Select ASDF 6ffg sdfg 4456 sdrg 出力: Select ASDF 325 XXXX sdflk lk Select TRG 46sdg rasdftz fsgs 45 Select ASDF 6ffg XXXX 4456 sdrg 要するに、「sed」「sdfg」を「XXXX」にする必要があります。 ただし、「Select ASDF」文字列を含む行のみ。これを行うにはどうすればよいですか?(sed、awkなど:\)
13 sed  awk 

3
sedを使用して、2つの文字列のすべての出現をきれいに交換します
StringAとStringBの両方が複数回出現するファイルがあるとします。StringAのすべての出現をStringBに置き換え、(同時に)StringBのすべての出現をStringAに置き換えます。 今、私は次のようなことをしています cat file.txt | sed 's/StringB/StringC/g' | sed 's/StringA/StringB/g' | sed 's/StringC/StringA/g' このアプローチの問題は、StringCがファイル内で発生しないことを前提としていることです。これは実際問題ではありませんが、この解決策はいまだに汚い感じがします。つまり、Unixの魔法をさらに学ぶ機会のように感じます。:)
13 sed 

2
欠損値の空白スペースをゼロに置き換える
約30K行のinput.txtタブ区切りテキストファイルがあります。各行(s1..s30K行)で欠損値(つまり、空白)をチェックし、欠損値にゼロ値を入力します。out.txtを参照してください。 input.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 4 4 s3 4 8 0 out.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 0 4 4 0 s3 4 0 8 0

3
awk-特定の列の1文字だけを置き換える
次のようなファイルがあります。 2018.01.02;1.5;comment 1 2018.01.04;2.75;comment 2 2018.01.07;5.25;comment 4 2018.01.09;1.25;comment 7 .2番目の列のすべてのドットをコンマで置き換えたいのです,が、これをsed 's/\./\,/g' fileどのように使用できるsedか、できれawkば2番目の列にのみ適用するので、出力は次のようになります。 2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7

2
ファイルの所有者を変更せずにsudoでコマンドを使用するにはどうすればよいですか?
sudoを使用してファイルを操作すると、これらのファイルの所有権が変更されます。ファイルの所有者を変更せずにsudoでコマンドを使用するにはどうすればよいですか? サンプルファイルarchivos35.shはApacheのものですが、sedを使用します(usr admin sudoを使用) $ ls -l -rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh adminsudoを持つユーザー--- sudo sed -i s/old/new/g archivos35.sh ただし、sudoでこのコマンドを実行すると、ファイルの所有者が変更されます $ ls -l -rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh sudoでコマンドを使用してファイルの所有者を変更しないようにするにはどうすればよいですか?所有者を変更せずにファイルを変更したいだけです。
12 sed  sudo  ownership 

3
末尾の空白がある場合とない場合の単語の一致にはどのような違いがありますか?
私はシェルスクリプトを学んでおり、そのためにHackerRankを使用しています。sed同じサイトに関連する質問があります:'Sed'コマンド#1: 特定の入力ファイルの各行について、単語「the」の最初の出現を「this」で変換します。検索と変換では、大文字と小文字を厳密に区別する必要があります。 まず始めに、 sed 's/the/this/' しかし、そのサンプルテストケースでは失敗しました。それから私は試した sed 's/the /this /' そしてそれは働いた。それでは、空白がどのような違いを生み出したのかという疑問が生じますか?ここに何かが足りませんか?
12 sed  whitespace 


3
2つのファイルを一度に1列ずつマージする
次の形式の2つの大きなファイル(3000列、15000行)があります file1(タブ区切り): 1/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 file2(タブ区切り): 3 5 2 1 7 10 3 4 3 各ファイルの最初の列の値を「:」区切り文字で組み合わせてから、2番目、3番目などの列に移動します。必要な出力(タブ区切り): 1/0:3 0/0:5 0/0:2 0/0:1 1/1:7 0/0:10 1/1:3 0/1:4 0/0:3 効率は重要ではないため、どの言語でも問題ありません。これが以前に尋ねられた場合、私は謝罪します。

3
sedまたはawkを再度呼び出さずに、文字列からドット文字を削除するにはどうすればよいですか?
次のhostlist.txtようなテキストを含むというファイルがあります。 host1.mydomain.com host2.mydomain.com anotherhost www.mydomain.com login.mydomain.com somehost host3.mydomain.com 次の小さなスクリプトがあります。 #!/usr/local/bin/bash while read host; do dig +search @ns1.mydomain.com $host ALL \ | sed -n '/;; ANSWER SECTION:/{n;p;}'; done <hostlist.txt \ | gawk '{print $1","$NF}' >fqdn-ip.csv 出力先fqdn-ip.csv: host1.mydomain.com.,10.0.0.1 host2.mydomain.com.,10.0.0.2 anotherhost.internal.mydomain.com.,10.0.0.11 www.mydomain.com.,10.0.0.10 login.mydomain.com.,10.0.0.12 somehost.internal.mydomain.com.,10.0.0.13 host3.mydomain.com.,10.0.0.3 私の質問は.、コンマの直前を削除せずにsed、gawk再度呼び出すことはできませんか?ドットを取り除く既存の呼び出しsedまたはgawk呼び出しで実行できるステップはありますか? hostlist.txt 数千のホストが含まれるので、スクリプトを高速かつ効率的にしたいです。

1
sedで複数の感嘆符を使用する意味は何ですか?
POSIX sedのドキュメントによると: 関数の前に1つ以上の「!」を付けることができます。この場合、アドレスがパターンスペースを選択しない場合に機能が適用されます。ゼロ個以上の<空白>文字は、最初の '!'の前に受け入れられます。キャラクター。<空白>文字が「!」の後に続くことができるかどうかは指定されていません。文字、および適合アプリケーションは、「!」<空白>文字を含む文字。 したがって、POSIX sedを使用すると、次のことができます。 sed -e '/pattern/!d' file 書くのと同じです: sed -e '/pattern/!!d' file そして!!!d、n感嘆符はまだ大丈夫です(家宝ツールチェストの 3つのsedバージョンでテスト済み)。1つの感嘆符の代わりに複数の感嘆符の間に利点はありません。 なぜ仕様がその構文を許可し、実際のアプリケーションでどのように役立つのですか? この場合、GNU sedは準拠していないようで、複数の感嘆符を使用すると文句を言います。 $ sed -e '/pattern/!!d' file sed: -e expression #1, char 11: multiple `!'s
12 sed  posix 

1
ポータブルsed -e…dbまたは!b?
では、この編集 ステファンChazelas POSIXifies (再び)私がsed挿入して書式設定-eXPRESSIONブレークと他の-eXPRESSION文を。今、私は単にコメントでなぜ彼に尋ねるかもしれませんが、その答えのリビジョン番号はすでに18であり、以前のほとんどはすでに同様の景品のおかげでした(削除されたコメントを見ることができるなら、あなたは何を知っているでしょうつまり)。また、より一般的に役立つ方法でこれを表現する理由を十分理解していると思います。だからここに期待しています... 一般的sed -eには、可能であれば合計xpressionsを1 に維持することを好みますが、特に差がa およびanに過ぎない場合は、可能な限り仕様に準拠することを優先します。しかし、なぜそうすべきか理解していない場合、これを行うことはできません。ここに私の理解の現在の状態の簡単な要約があります:<space>-e ' -e 'ブレークが移植性のためで立つことができるsedのスクリプト\nでewlineブレークsedコマンドラインステートメント... 私は理由について明らかにあいまいです sed {関数内の右中括弧の}前には、\nここに記載されているようにewlineブレークが必要です。 の<right-brace>前にa <newline>を付け、<blank>文字の前または後に指定できます。 \newlineブレークは、同様に...のいずれかの使用、次の要求されa、b、c、i、r、t、w、または:。 しかし、{関数}定義が!not演算子にどのように関係するのか明確にはわかりません。仕様の状態で否定演算子について私が見つけた唯一の言及: 関数の前に1つ以上の!文字を置くことができます。この場合、アドレスがパターンスペースを選択しない場合、関数が適用されます。 これは、aの使用!が{中括弧を意味することを意味します}か?$!コマンドは何ですか-同様に' -e 'ブレークで区切る必要がありますか?Stéphaneが最近POSIXで答えを出したとき、これは対処されたものでしたか? 私はそれが!否定演算子であるかb、彼が彼の編集で対処する牧場ステートメントであると思う-または多分一度に両方である-しかし、私は知りませんし、好きです。それが牧場の声明だけであるなら、私はその代わりにやると休憩の必要性をなくすと信じていますが、POSIX化された3 つの答えを危険にさらす前に私はむしろ確信しています。手伝ってくれますか?bd' -e ' 私は結局それを危険にさらしましたが、大きな確実性はありませんでした...
12 shell  sed  posix 

4
最後にコメントされた行から「foo」のある行までのすべての行をコメントします
テキストファイルを考えますusers.txt。 #alice #bob charlie dotan eric 最後のコメント行(包括的)から(包括的)までのすべてをコメントする必要がありdotanます。これが結果です: #alice #bob #charlie #dotan eric sedこれを行うための素敵なワンライナーはありますか?ただのツールだけsedでなく、本当に満足しています。 現在、最後にコメントされた行の行番号を取得しています: $ cat -n users.txt | grep '#' | tail -n1 2 #bob 私はそれを追加してコメントしsedます: $ sed -i'' '3,/dotan/ s/^/#/' users.txt 私は賢く、これをいくつかと一緒にputいbcワンライナーにまとめることができることを知っています。確かにきれいな方法があるはずですか?

4
grepを使用して()の前の文字を抽出します
文字 '('の前の文字を抽出する必要があります。ファイル構造は次のとおりです。 バラ(いい) デイジー() リリー(悪い)罰金 ひまわり() 次の形式の出力ファイルが必要です。 rose daisy lilly sunflower 誰でもこのコマンドを伝えることができます..... awk、grep、またはsedが望ましい...
12 sed  awk  grep 

5
sedの動作はFreeBSDとLinuxで異なりますか?
私はLinuxとFreeBSDの両方を使用しています(具体的には、Debian LinuxとPC-BSDを使用しています)sed。 「タブ区切り値」ファイルを「コンマ区切り値」に変換する必要が頻繁にあります。私が知っている最も簡単な方法はsed、次のように使用することです: sed 's/\t/,/g' inputFile.txt > outputFile.csv これはLinuxでは完全に機能します。すべてのタブをコンマに置き換えます...しかし、FreeBSDでは何も置き換えません!!! 何か不足していますか?sedLinuxの構文とは異なるFreeBSDの構文はありますか?
12 sed  freebsd 

4
awkまたはsedで最初の列で行を連結します
awk次の状況でどのように使用できますか? 同じ列で始まる行を連結します。結合後は最初の列のみが保持されます(この場合aaaはwww、、hhh)。 ファイルはスペースまたはタブで区切られます。 入力例: aaa bbb ccc ddd NULL NULL NULL aaa NULL NULL NULL NULL NULL NULL aaa bbb ccc NULL NULL NULL NULL www yyy hhh NULL NULL NULL NULL hhh 111 333 yyy ooo hyy uuuioooy hhh 111 333 yyy ooo hyy NULL 望ましい出力: aaa bbb ccc …

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