如何在 Sed/Grep/... 中的冒号之前包含所有内容?

Léo*_* 준영 0 grep sed

代码

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?
Run Code Online (Sandbox Code Playgroud)

在哪里

  • 输入是./BitTorrentSync/Gyn/1.12.2015.tex: Agents in young <40yr?
  • 预期输出为./BitTorrentSync/Gyn/1.12.2015.tex

我认为-n这里没有意义,因为我想将输出传递给less. 我搜索了匹配项,.*tex:但它实际上不应该包含:在结果中。我坚持p到底不做更换。

DonCristi 的输出 grep

试图在结肠分裂:grep不的种子sed/ grep/ ...代码在GNU grep的2.23

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

不成功的输出,输出为文件内容,而不是文件名。这个命令实际上只包含文件的内容,它不在文件名之外。


如何:在 SED/Grep/... 中的冒号之前获得所有内容?

Wil*_*ard 5

  1. sed操作标准输入,而不是它的参数,除非你给它文件名。
  2. 使用 指定要删除的内容比要保留的内容更容易sed

代替

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?
Run Code Online (Sandbox Code Playgroud)

也许你的意思是

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | sed 's/:.*//'
Run Code Online (Sandbox Code Playgroud)

但是对于这个特定的用例,您不妨只使用一个单一用途的工具,即cut

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | cut -d: -f1
Run Code Online (Sandbox Code Playgroud)