Bash 用于匹配安装路径的正则表达式
我需要从文件中提取主机上TWS的有效安装路径:Bash 用于匹配安装路径的正则表达式,bash,awk,Bash,Awk,我需要从文件中提取主机上TWS的有效安装路径: /usr/Tivoli/TWS/TWS/ /usr/Tivoli_123/TWS_123/TWS/ /usr/Tivoli_123/TWS/TWS_123/ /usr/Tivoli_123/XYZ/TWS 任何像/usr/Tivoli.*/TWS/TWS.*这样的格式都是有效的。我在以下命令中使用此正则表达式: cat ../TWS/test | awk -F " " '/Tivoli.*\/TWS\/TWS.*/{print
/usr/Tivoli/TWS/TWS/
/usr/Tivoli_123/TWS_123/TWS/
/usr/Tivoli_123/TWS/TWS_123/
/usr/Tivoli_123/XYZ/TWS
任何像/usr/Tivoli.*/TWS/TWS.*
这样的格式都是有效的。我在以下命令中使用此正则表达式:
cat ../TWS/test | awk -F " " '/Tivoli.*\/TWS\/TWS.*/{print $1}'
但它给出了包含所有条目的输出:
/usr/Tivoli/TWS/TWS/
/usr/Tivoli_123/TWS_123/TWS/
/usr/Tivoli_123/TWS/TWS_123/
/usr/Tivoli_123/XYZ/TWS
正则表达式有什么问题
任何像/usr/Tivoli\u/TWS/TWS\u这样的格式都是有效的
只是
应该足够只打印这些匹配的行
但您也可以在shell中用case
进行字面匹配:
while IFS= read -r line; do
case "$line" in
/usr/Tivoli_*/TWS/TWS_*) echo "$line"; ;;
esac
done < ../TWS/test
而IFS=read-r行;做
大写“$line”
/usr/Tivoli_*/TWS/TWS_*)回声“$line”;;
以撒
完成<../TWS/测试
*
匹配任何文本,包括/
。将
替换为[^\/]
(OT:)Tivoli.*
不是Tivoli.*
,而是Tivoli.*
。相同的TWS.
不是TWS.*
而是TWS.*
@HyperioN:TWS.*
匹配任何在某处包含TWS的行。*
部分是冗余的;你也可以省略它。
while IFS= read -r line; do
case "$line" in
/usr/Tivoli_*/TWS/TWS_*) echo "$line"; ;;
esac
done < ../TWS/test