繁体   English   中英

Bash-在一行中输入多个命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM