[英]Run multiple commands in multiple Terminal windows with a single bash line
[英]Bash - sed multiple commands in single line
玩sed-下面的命令可以完成所需的工作,但最好使用衬板。 我尝试过结合前两个命令(用一个单独的“;”)来删除结尾的“:”,但没有成功。 否则,请删除最后一个':'并写入新文件以执行下一个操作。
文件'sys'用单行包含可变数字字符和':'分隔符。 例如;
输入3.000000:50:
'第一行3.000000:50:
所需的输出,两个变量thd=3 mem=50
thd=$(echo | sed 's/.......:.*//' < sys)
sed 's/:$//' < sys > sys1
mem=$(echo | sed 's|........:||' < sys1)
有没有一种方法可以结合前两个sed命令来避免写入第二个文件? 我已经尝试过各种方法
像这样-编辑:这是删除尾随':'的错误命令
thd=$(echo | sed 's/:$//;s/.......:.*//' < sys)
mem=$(echo | sed 's|........:||' < sys1)
输出3 50:
已连接分隔符。
编辑:这是正确的顺序,并产生所需的输出。 Bash不会将第一次操作的结果保存在文件sys中。 我应该在3班轮中接过。
thd=$(echo | sed 's/.......:.*//' < sys)
mem=$(echo | sed 's|........:||;s/:$//' < sys)
如果您需要两个变量独立地赋值,第一个变量包含该点之前的数字,第二个变量包含冒号之间的数字,则可以使用如下方法
thd=$(cut -f1 -d. < sys)
mem=$(cut -f2 -d: < sys)
同时分配两者也是可能的:
read thd mem < <(tr "." ":" < sys | cut -f1,3 -d: --output-delimiter=" ")
尝试这个:
$ echo '3.000000:50:' | { IFS='.:' read thd x mem; echo "'$thd' '$mem'"; }
'3' '50'
或这个:
$ sys='3.000000:50:'; IFS='.:' read thd x mem <<< "$sys"; echo "'$thd' '$mem'"
'3' '50'
上面设置了“ dont care”变量x
。 如果您不喜欢,可以分配两次mem
。
$ sys='3.000000:50:'; IFS='.:' read thd mem mem <<< "$sys"; echo "'$thd' '$mem'"
'3' '50'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.