我有一个像这样的字符串:
%group1 ALL=(ALL) /ora/crs/oracle/product/crs/bin/gsdctl *,/ora/crs/oracle/product/crs/bin/vipca,/ora/app/oracle/ora/Root.sh,/ora/crs/oracle/product/crs/root.sh,/ora/crs/oracle/product/crs/bin/srvctl *,/ora/app/oracle/product/root.sh
输出应该是:(仅打印 .sh 脚本)
/ora/app/oracle/ora/Root.sh
/ora/crs/oracle/product/crs/root.sh
/ora/app/oracle/product/root.sh
答案1
在此示例中,这也适用,因为逗号仅用于分隔绝对路径:
grep -o '/[^,]*\.sh' file
答案2
假设您的行是文件中的唯一行file
,您可以使用sed
cat file | sed 's/,/\n/g' | sed -n '/\.sh$/ p'
第一个sed
命令用换行符替换所有逗号,第二个命令打印以 结尾的所有行.sh
。所以我们也可以不用sed
:
cat file | tr ',' '\n' | grep '\.sh$'
答案3
没有 的替代方案sed
,但仍然容易受到路径/文件名中逗号的影响
grep -Po "(?<=[, ])[^,]*\.sh(?=,|$)" test