使用 sed 将一系列文本替换为特殊字符

使用 sed 将一系列文本替换为特殊字符

我正在尝试用包含特殊字符的 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

相关内容