Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 具有多个标准的Sed_Shell_Unix_Sed_Criteria_Conditional Statements - Fatal编程技术网

Shell 具有多个标准的Sed

Shell 具有多个标准的Sed,shell,unix,sed,criteria,conditional-statements,Shell,Unix,Sed,Criteria,Conditional Statements,我有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=\(

我有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个命令放到一个命令中,得到一个输出文件,其中包含所有结果,作为三个条件的并集。

这不管用吗

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
使用多个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将在每个输入行上顺序运行表达式,并且仅在处理序列中的最终表达式后打印模式空间。当然还有其他的方法可以做到这一点,但给出您的示例,这似乎是最合适的。

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”就行了。

谢谢你的回复,但我需要的不是加入关系。我想要联合关系,输出日志,只要我认为管道是合理的答案,但它需要三个单独的过程。不是不使用它的理由;在一个进程中执行所有操作的效率更低。YMMV。满足任何标准,然后放入结果。所以。。。运行第一个,然后附加下两个?请通过包含您正在用作测试语料库的任何样本来改进您的问题。此外,还应包括一份格式正确的预期输出样本,以便人们了解您试图实现的结果。