我正在尝试用包含特殊字符的 sed 替换一系列文本。
我有以下输出:
"Users" "/Users/Users" SERVER1
"Roaming Profiles" "/Roaming Profiles/Roaming Profiles" SERVER2
我希望它是这样的:
Users SERVER1
Roaming Profiles SERVER2
答案1
$ sed -r 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file
Users SERVER1
Roaming Profiles SERVER2
怎么运行的
sed 替换命令的形式为s/old/new/
.的正则表达式old
由以下部分组成:
"([^"]*)"
-- 这会匹配引号中的第一个字符串并将其保存在组 1 中。([^"]*"){2}
-- 这与第二个带引号的字符串匹配(包括其前面的空格)。[[:space:]]*
-- 这与第二个带引号的字符串后面的空格匹配。
的正则表达式new
很简单\1
,它是一个空格,后跟第一个带引号的字符串,通过括号,我们将其保存在组 1 中。
Mac OSX 或其他 BSD 平台
在 OSX 上,尝试:
sed -E 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file
答案2
使用awk:
awk -F\" '{print $2,$5}' file