標準入力から特定の文字列を除外する


-1

パイプ入力を受け取り、特定の文字列をフィルター処理して残りを標準出力に書き込むUnixコマンドが必要です。難点は、標準的なLinuxディストリビューションですぐに使用できるものに依存しない1行のコマンドである必要があることです。

コンテキストは、 'llvm-config --libs'がリンクすべきでないいくつかのテストファイルにリンクしているため、それらを削除する必要がありますが、configure.ac内から行う必要があります。

ひねりは、行ごとに1つのアイテムではなく、すべてのアイテムが同じ行にあり、改行ではなくスペースで区切られていることです。

回答:


1

grepは、非常に一般的なUnix / Linuxコマンドです。少なくとも、基本grep(たとえばegrep、別のフィルターコマンド)をインストールする必要のあるディストリビューションにはまだ出会っていません。

パイプ入力を取得し、特定の文字列をフィルタリングして、残りを標準出力に書き込みます。

そのように使用してフィルターで除外するには、次の操作を実行できます(catファイルを標準出力に出力する場合)

cat "some_file.txt" | grep -v "text to omit"

さらに、grepファイルでも機能するため、上記のコマンドは次のように記述できます。

grep -v "text to omit" "some_file.txt"

-vフラグが伝えるgrepすべてを印刷することを除き、指定したテキスト。大文字と小文字を区別しない検索が必要な場合は、-iフラグを指定する必要があります。

行ごとに1つのアイテムではなく、改行ではなくスペースで区切られた同じ行にあるすべてのアイテムです。

これに、forループを追加して単語を繰り返し処理し、grepを使用して必要なものを実現できます。例:

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v "how"

この出力は次のようになります。

are
you
am i today

また、1行で出力するには、trコマンドを使用\nしてスペースに変換します。

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v how | tr '\n' ' '

出力は次のようになります。

are you am i today 

の最初の部分for word inはシェルスクリプトfor loopです。提供されるリンクは固有ですBASHが、構文は他のシェル間で非常に類似しているため(少なくともCSHKSHおよびASH)、特定のシェルに一致するように調整する必要があります。

それが役立つことを願っています。


あ!入力が行ごとに1つの項目である場合は実際にそうなりますが、そうではなく、同じ行にあるすべての項目で、改行ではなくスペースで区切られます。それを質問の明確化として追加した方がいいでしょう。
-rwallace

@rwallace、更新された質問に対する私の回答を更新しました:)
txtechhelp

有難うございます!後で出力を単一行形式に戻す方法はありますか?または、メイクファイルで終わる必要があるため、各行にバックスラッシュを追加するなどの方法があります。
-rwallace

...悲しいことに、最後の行からバックスラッシュを省略する必要があるため、各行にバックスラッシュを追加しても機能しません。
-rwallace

答えを再度修正し、その出力をtr..にパイプするだけです。例:for word in blah blah blah; do echo $word; done | grep -v omit | tr '\n' ' '
txtechhelp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.