Sed

如何在 grep 輸出的文件名後添加空格?

  • May 7, 2022

我正在使用grep搜尋文件中的匹配模式,並從輸出中複製其文件名。因為我經常做這個操作,所以我最終也可能會複製:。因此,是否可以在第一個匹配的半列或文件名的結尾之前添加兩個空格?

$ grep -Hrn -e "zorro" --color=always --exclude-dir=dir -I -F . | \
   cut -c 11- | awk '$0="\033[33;35m"$0' | tr -s '[:space:]'
doo.tex:1:zorro alper alper alper skfjsdlkfj dslfj dslkj

想要的輸出:

doo.tex  :1:zorro alper alper alper skfjsdlkfj dslfj dslkj
       ^
 <two space added>

我的第一個雖然去了awk

awk -F: -vOFS=: '{$1 = $1 "  "; print}'

但這比我認為的需要做的工作更多,拆分並重新加入生產線。

sed替代方案非常簡潔

sed 's/:/  :/'

用 2 個空格和一個冒號替換一個冒號。


關於帶冒號對話的文件名:

閱讀 GNU grep 手冊頁:使用-Z選項:“輸出零字節(ASCII NUL 字元)而不是通常跟隨文件名的字元。”

所以:

# .......v
grep -HrnZ -e "zorro" --color=always --exclude-dir=dir -I -F . | \
 perl -pe 's/\0/  :/'

引用自:https://unix.stackexchange.com/questions/701703