玩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)
答案 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'