我有一个包含以下内容的 .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
- 并以所需格式打印字符串
$_
分别是输入及其处理形式的变量