[英]How to cut a space from a string in a Unix shell script
我正在阅读一个文件并根据一些逻辑切割一列。 我的问题是我无法用空格剪切一列。
这是测试代码 -
st="1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m"
HardErrorCheckColumnValue=`echo $st | cut -d'|' -f7`
echo $HardErrorCheckColumnValue
输出应该是 -
mls k
但我得到 -
mls k
如何使其不修剪前导或尾随空格? 它应该给空间,即使它只包含空间。
您必须在变量周围使用引号:
HardErrorCheckColumnValue=$(echo "$st" | cut -d'|' -f7)
echo "$HardErrorCheckColumnValue"
mls k
最好使用$(...)
而不是旧式的后退来进行命令替换。
awk会帮助你
$ cat file.dat
1|alalhabad|up|tushar|kesarwani|90| mls ki |19990|india|420|24|m
$ awk -F"|" '{print "|"$7"|"}' file.dat
| mls ki |
||
编辑2
如果你回显st变量那里有一个问题,一些空格消失:
检查区别:
$ st="1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m"
$ echo $st
1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m <-- ONE SPACE GONE
$ cat file.dat
1|alalhabad|up|tushar|kesarwani|90| mls ki |19990|india|420|24|m
$ awk -F"|" '{print "|"$7"|"}' file.dat
| mls ki | <---- SPACE OK
||
在打印之前保护您的变量:
echo "$HardErrorCheckColumnValue"
没有引用它会扩展为echo mls k
,而随着它被扩展为echo " mls k"
但正如@Mat指出的那样,伤害已经完成了。 所以请参考@anubhava的答案:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.