Bash sed DON';不要删除多余的空格
似乎其他人都想删除任何额外的空白,但我有相反的问题 我有一个文件,称之为某个_file.txtBash sed DON';不要删除多余的空格,bash,sed,Bash,Sed,似乎其他人都想删除任何额外的空白,但我有相反的问题 我有一个文件,称之为某个_file.txt a b c d and some more 我和塞德一行一行地读着 num_lines=$(cat some_file.txt | wc -l) for i in $(seq 1 $num_lines); do echo $(sed "${i}q;d" $file) string=$(sed "${i}q;d" $file) echo $stri
a b c d
and some more
我和塞德一行一行地读着
num_lines=$(cat some_file.txt | wc -l)
for i in $(seq 1 $num_lines); do
echo $(sed "${i}q;d" $file)
string=$(sed "${i}q;d" $file)
echo $string
done
我希望空白字符的数量保持不变,但是我得到的输出是
a b c d
a b c d
and some more
and some more
因此,sed似乎存在删除字符之间额外空白的问题,无论如何,要解决这个问题?看看这个例子:
$ echo Hello World
Hello World
$ echo "Hello World"
Hello World
sed
不是您的问题,您的问题是bash在将sed
的输出传递到echo
时删除了空白
您只需将echo
要打印的内容用双引号括起来即可。所以不是
echo $(sed "${i}q;d" $file)
echo $string
你写
echo "$(sed "${i}q;d" $file)"
echo "$string"
新脚本应如下所示:
#!/usr/bin/env bash
file=some_file.txt
num_lines=$(cat some_file.txt | wc -l)
for i in $(seq 1 $num_lines); do
echo "$(sed "${i}q;d" $file)"
string=$(sed "${i}q;d" $file)
echo "$string"
done
while IFS= read -r line; do
echo "$line"
done < some_file.txt
打印正确的输出:
a b c d
a b c d
and some more
and some more
但是,如果您只想逐行查看文件,我强烈建议您这样做:
#!/usr/bin/env bash
file=some_file.txt
num_lines=$(cat some_file.txt | wc -l)
for i in $(seq 1 $num_lines); do
echo "$(sed "${i}q;d" $file)"
string=$(sed "${i}q;d" $file)
echo "$string"
done
while IFS= read -r line; do
echo "$line"
done < some_file.txt
(请注意,我可能还会在其中包含一些对$1
的验证。)
我将
s
和e
声明为整数变量,然后即使bash
也可以对它们进行一些简单的运算,并计算实际要打印的最后一行。这没有意义,字符串赋值和echo与minenop一样精确,无论echo
被要求打印的内容是什么,我都用引号括起来。我正试图逐行检查文件,但是只有从第#行开始的x(=33)行(由$1指定),还有比使用sed更好的方法吗?我更新了一个可能的解决方案。可能有一百种不同的类型。注意,while循环仍然会吞噬空格,即如果行以空格开头;您必须在IFS=read时使用,以避免这种情况。最好使用read-r
来避免反斜杠转义的解释,请参阅