我写了以下脚本:
while read ligne;
do
echo ${ligne} >> /tmp/test.conf;
other code lines but it's not our probem.
done < <(cat file.conf | sed -ne '/toto/,$p');
file.conf包含类似的数据:
test1 {
var2 {}
}
toto {
var1 {
next {}
}
}
脚本必须写入文件/tmp/test.conf
toto {
var1 {
next {}
}
}
带缩进。
今天我到达了这个结果:
toto {
var1 {
next {}
}
}
我尝试通过添加IFS变量来修改我的脚本:
(IFS='\n';
while read ligne;
do
echo ${ligne} >> /tmp/test.conf;
other code lines but it's not our probem.
done < <(cat file.conf | sed -ne '/toto/,$p'));
我有缩进,但结果中的所有n个字母都已删除。
toto {
var1 {
ext {}
}
}
为什么呢?我该如何解决?
答案 0 :(得分:1)
您可以在IFS=
之前使用read
这个循环:
while IFS= read -r ligne; do
echo "$ligne" >> /tmp/test.conf
done < <(sed -ne '/toto/,$p' file.conf)
或者确保内部变量REPLY
:
while read; do
echo "$REPLY" >> /tmp/test.conf
done < <(sed -ne '/toto/,$p' file.conf)
答案 1 :(得分:0)
IFS必须设置为空字符串,而不是换行符:
(IFS='';
while read ligne;
do
echo ${ligne} >> /tmp/test.conf;
# other code lines but it's not our probem.
done < <(cat file.conf | sed -ne '/toto/,$p'));