我的上一个脚本生成了一个txt文档,其中包含文件的前10行/etc/passwd
。我想通过显示以下内容中的前3个字来过滤文件中的20行*:*:*
:(其中*
= words)
这是我正在解决的问题,但无法正常工作:
#!/bin/bash
echo "**********************************"
echo "Today is: "$(date "+%d%m%Y")
echo "**********************************"
echo "This are the data that last script generated"
echo "**********************************"
echo
echo $(grep *:*:*: /tmp/test-file)
如果需要使用grep
,可以将每行的前三个字段与
grep -o '^[^:]*:[^:]*:[^:]*'
这会匹配行(^
)的开头,然后匹配除冒号:
后跟冒号:
等的所有内容。由于有了此-o
选项,grep
仅打印匹配行的匹配(非空)部分,请参见man grep
。这是前两行的示例/etc/passwd
:
$ grep -oh '^[^:]*:[^:]*:[^:]*' <(head -2 /etc/passwd) <(tail -2 /etc/passwd)
root:x:0
daemon:x:1
timidity:x:122
geoclue:x:123
在https://www.regular-expressions.info/gnu.html上阅读有关正在使用的基本正则表达式(BRE)的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句