Sed/Grep/...でコロンの前のすべての内容をどのように含めますか?

Sed/Grep/...でコロンの前のすべての内容をどのように含めますか?

パスワード

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

どこ

  • 入力はです./BitTorrentSync/Gyn/1.12.2015.tex: Agents in young <40yr?
  • 予想される出力はです./BitTorrentSync/Gyn/1.12.2015.tex

-n出力をに渡したいのでここでは意味がないと思います。less一致を検索しましたが、実際には結果に.*tex:含めないでください。最終的に交換しないオプションが:あります。p

DonCristiの出力grep

://シードなしgrepでコロンで分割してみてください... GNU Grep 2.23のコードsedgrep

find . -name "*.tex" -exec ggrep -i -oP '^[^:]*(?=:)' {} \; | less

出力に失敗すると、ファイル名ではなくファイルの内容が出力されます。このコマンドは実際にはファイルの内容のみを含み、ファイル名は無視します。


:SED / Grep / ...でコロンの前のすべてのアイテムをどのようにインポートしますか?

答え1

  1. sed引数ではなくstdinで動作、ファイル名を指定しない限り。
  2. 保持するアイテムよりも削除するアイテムを指定する方が簡単ですsed

変える

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

おそらくあなたは

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | sed 's/:.*//'

ただし、この特定のユースケースでは、次の単一目的ツールを使用することもできますcut

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | cut -d: -f1

答え2

grep時間をかけてマニュアルを読むと、lオプションが見つかります。

-l, --files-with-matches
       Suppress normal output; instead print the name of each input file from which  output would normally
       have been printed. The scanning will stop on the first match.

あなたのfindコマンドは次のとおりです

find . -name "*.tex" -exec grep -il "agent" {} \; | less

またはより速く

find . -name "*.tex" -exec grep -il "agent" {} + | less

答え3

tex:代わりにsedとmatchでこれを行うことにした場合は、次のことを試すこともできます:

echo "./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?" | sed 's/\(^.*tex\):.*/\1/'

答え4

$ abc="./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?"
$ pqr=$(echo "$abc" | sed -e 's/:.*//')
$ echo $pqr
./BitTorrentSync/Gyn/1.12.2015.tex

これは私にとって効果的です。

関連情報