3

我有 3 个sed命令:

sed -n 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/p' inputfile > outputfile
sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p'  inputfile > outputfile
sed -n 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' inputfile > outputfile

每个命令都有一个标准。我只想将 3 个命令放入 1 个命令中,以获得一个输出文件,其中包含所有结果作为三个标准的联合。

4

3 回答 3

13

使用多个 Sed 表达式

您可以将多个 sed 表达式放在由换行符分隔的脚本中,或者作为由-e选项分隔的多个表达式。例如:

sed -n -e 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/'      \
       -e 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/'  \
       -e 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' \
       inputfile > outputfile

在此示例中,sed 将在每个输入行上按顺序运行表达式,并且仅在处理完序列中的最终表达式后打印模式空间。当然还有其他方法可以做到这一点,但鉴于你的例子,这似乎是最合适的。

于 2012-07-19T21:57:31.907 回答
1

sed -e允许在一行中写入;单独的命令。

sed -e 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/ ; s/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/ ; s/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p'

小修正 - 不需要“-ne”。只是“-e”只会起作用。

于 2012-07-22T15:02:05.313 回答
0

这不行吗?

sed -n 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/p' inputfile | sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p' | sed -n 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' > outputfile
于 2012-07-19T21:54:07.343 回答