shell 使用sed从grep输出中打印特定行

cotxawn7  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(363)

我正在练习以下教程,我的目标是只搜索用户,并打印到一个txt文件,所以我有下一个命令到目前为止。

cat /etc/passwd | awk -F ":" '{print $1}' | grep -n $search_param

在这里,我得到了所有符合$search_param条件的行的输出,但是现在我想使用sed来显示它,这样我就可以在sed exp中将分隔符“:“替换为“\t”,然后创建一个文件,但问题是使用grep只使用第一列进行过滤,然后继续显示所需行上的所有信息。
我尝试将它直接通过管道传输到sed中,但似乎不起作用,因为它将从技术上播种行号,而不是/etc/passwd上的特定行。

c7rzv4ha

c7rzv4ha1#

cat-到-awk-到-grep-到-sed是一个 * 痛苦 * 的反模式。

awk -F: -v key="$search_param" '$1~key { print $1 "\t" $5 }' /etc/passwd

您还可以进行空格填充、截断,甚至右对齐。printf非常灵活。

awk -F: -v key="$search_param" '$1~key{printf "%+20.20s\t%+40.40s\n", $1, $5}' /etc/passwd

相关问题