While Loop 无法正确解析/粘贴字符串

While Loop 无法正确解析/粘贴字符串

我有一个包含以下内容的 .txt 文件:

"[email protected]"

现在,我想借助 while 循环将这些字符串粘贴到标准输出,以便 echo 应该写入"text [email protected] text"

while read line;
do 
    echo "text $line text"
done <./textfile.txt

但我得到的只是:text"[email protected]"

text--> 空格和后面的空格$line都丢失了。

如果我将其更改如下

while read line;
do 
     echo "text\ $line text"
done <./textfile.txt

我明白了text "[email protected]"

--> 第一个之后text有一个空格,但之后[email protected]就没有了text

答案1

自从使用 shell 循环进行文本处理被认为是不好的做法,我会推荐一种使用专用文本处理工具的不同方法。特别是,awk我想到:

awk '{printf "text %s text\n",$0}' textfile.txt 

这将使用 Awk 的内置printf函数(使用与众所周知的 C 函数相同的格式化语法)来打印两端$0用 括起来的整个当前行(由 表示) 。text

至于为什么你的方法不起作用:由于您确认文本文件是在基于 Windows 的计算机上编辑的,这意味着行结尾采用 Linux 无法正确解释的格式。在这种情况下,通过 运行文件dos2unix,如下所示

dos2unix textfile.txt

应正确处理生成的文件。

答案2

自我介绍一下,perl请随意和我一起学习:

perl -ne ' s/\n|"//g ; print "\"text $_ text2\"\n" ' infile.txt
  • 逐行读取文件-n
  • 执行内联脚本-e
  • 从输入行中删除所有换行符和引号s/\n|"//g
  • 并以所需格式打印字符串
  • $_分别是输入及其处理形式的变量

相关内容