
パスワード
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のコードsed
grep
find . -name "*.tex" -exec ggrep -i -oP '^[^:]*(?=:)' {} \; | less
出力に失敗すると、ファイル名ではなくファイルの内容が出力されます。このコマンドは実際にはファイルの内容のみを含み、ファイル名は無視します。
:
SED / Grep / ...でコロンの前のすべてのアイテムをどのようにインポートしますか?
答え1
sed
引数ではなくstdinで動作、ファイル名を指定しない限り。- 保持するアイテムよりも削除するアイテムを指定する方が簡単です
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
これは私にとって効果的です。