我的代码看起来像这样:
for line in `cat fileName`
do
if [[ $line == "Marker 1" ]]
then
while [[ $line != "---" ]]
do
#basically I want to read all the data below "Marker 1" till "---"
echo $line
((line++)) #this is wrong
done
elif [[ $line == "Marker 2" ]]
then
while [[ $line != "---" ]]
do
echo $line
((line++))
done
fi
done
在while循环中如何递增$ line的值? ((行++))不起作用
答案 0 :(得分:0)
如果目标是将带有标记1或标记2的行中的所有行回显到带有---
的行,则可以使用此简单的sed命令替换整个shell循环:
sed -n '/^Marker [12]$/,/^---$/p' File
考虑这个测试文件:
$ cat File
beginning
Marker 1
one
---
more
Marker 2
two
Two
---
end
现在,让我们运行命令:
$ sed -n '/^Marker [12]$/,/^---$/p' File
Marker 1
one
---
Marker 2
two
Two
---
使用相同的测试文件:
$ awk '/^Marker [12]$/,/^---$/' File
Marker 1
one
---
Marker 2
two
Two
---
答案 1 :(得分:0)
((line++))
用于递增整数值。
但是,示例中line
的值是一个字符串。
实际上你似乎想要的是从文件中获取下一行。
您需要采用不同的方法,并使用while read
而不是for循环。
#!/usr/bin/env bash
read_and_print_until_dashes() {
while read -r line; do
[[ $line = '---' ]] && break
echo "$line"
done
}
while read -r line; do
if [[ $line = "Marker 1" ]]; then
echo "$line"
read_and_print_until_dashes
elif [[ $line = "Marker 2" ]]; then
echo "$line"
read_and_print_until_dashes
fi
done < file.txt