加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 当我在shell脚本中使用cat命令时,如何在文件末尾保留空

发布时间:2021-01-01 14:40:19 所属栏目:Linux 来源:网络整理
导读:文件a.txt末尾有两个空行 [yaxin@oishi tmp]$cat -n a.txt 1 jhasdfj 2 3 sdfjalskdf 4 5 我的脚本是: [yaxin@oishi tmp]$cat t.sh #!/bin/sha=`cat a.txt`a_length=`echo "$a" | awk 'END {print NR}'`echo "$a"echo $a_length[yaxin@oishi tmp]$sh t.sh

文件a.txt末尾有两个空行

[yaxin@oishi tmp]$cat -n a.txt 
     1  jhasdfj
     2  
     3  sdfjalskdf
     4  
     5

我的脚本是:

[yaxin@oishi tmp]$cat t.sh 
#!/bin/sh
a=`cat a.txt`
a_length=`echo "$a" | awk 'END {print NR}'`
echo "$a"
echo $a_length


[yaxin@oishi tmp]$sh t.sh 
jhasdfj

sdfjalskdf
3

打开调试

[yaxin@oishi tmp]$sh -x t.sh 
++ cat a.txt
+ a='jhasdfj

sdfjalskdf'
++ echo 'jhasdfj

sdfjalskdf'
++ awk 'END {print NR}'
+ a_length=3
+ echo 'jhasdfj

sdfjalskdf'
jhasdfj

sdfjalskdf
+ echo 3
3

cat命令窃取文件末尾的空白行.如何解决这个问题.

解决方法

你这里不需要cat命令,直接使用这样的awk:
awk 'END {print NR}' a.txt

您的问题是将cat的输出存储在shell变量中.即使这样也会给出正确的输出(尽管是UUOC的情况):

cat a.txt | awk 'END {print NR}'

更新:当您尝试执行此操作时:

a=`cat a.txt`

要不然:

a=$(cat a.txt)

陷阱是过程替换,即反向引用内的命令,如你所拥有或在$()中删除尾随换行符.

您可以使用此技巧来获取存储在shell变量中的尾随换行符:

a=`cat a.txt; echo ';'`
a="${a%;}"

测试变量值:

echo "$a"
printf "%q" "$a"

然后输出也会显示换行符:

jhasdfj

sdfjalskdf


$'jhasdfjnnsdfjalskdfnnn'

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读