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

时间:2018-08-28 09:08:31

标签: bash sed

玩sed-下面的命令可以完成所需的操作,但最好使用衬板。我尝试过结合前两个命令(用一个单独的“;”)来删除结尾的“:”,但没有成功。否则,请删除最后一个“:”并写入新文件以执行下一个操作。

文件'sys'用一行包含可变数字字符和':'分隔符。例如;

输入-'sys'第一行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)

2 个答案:

答案 0 :(得分:1)

如果您需要分别给两个变量分配值,第一个变量包含该点之前的数字,第二个变量包含冒号之间的数字,则可以使用类似的方法

thd=$(cut -f1 -d. < sys)
mem=$(cut -f2 -d: < sys)

也可以同时分配两者:

read thd mem < <(tr "." ":" < sys | cut -f1,3 -d: --output-delimiter=" ")

答案 1 :(得分:1)

尝试一下:

$ 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'