我有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个命令中,以获得单个输出文件,其中包含所有结果作为三个标准的并集。
答案 0 :(得分:9)
您可以将多个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将在每个输入行上按顺序运行表达式,并仅在处理序列中的最终表达式后打印模式空间。肯定有其他方法可以做到这一点,但鉴于你的例子,这似乎是最合适的。
答案 1 :(得分:1)
sed -e
允许使用;
在一行中写入单独的命令。
sed -ne 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/ ; s/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/ ; s/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p'
答案 2 :(得分: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