从字符串中提取“.sh”脚本并重新格式化它们

从字符串中提取“.sh”脚本并重新格式化它们

我有一个像这样的字符串:

%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

相关内容