我已经写了一个小脚本如下
#!/usr/bin/ksh cat test |while read line1 do echo "$line1" done
input文件“test”有以下几行
Kensington K64391US C \ i70 Wireless
桌面任天堂Wii无线双节棍
\ M470 DeLonghi HHP1500云母面板
Vi \ 20散热器加热器
但输出中缺less“\”,如下所示
Kensington K64391US Ci70无线
桌面任天堂Wii无线双节棍
M470 DeLonghi HHP1500云母面板Vi20
散热器加热器
我怎样才能得到“\”来输出?
使用read的-r选项。
从ksh手册页:
在原始模式下,-r,\字符不被特别处理。
那么,一个简单而快速的答案就是用双斜杠replaceinput文件中的所有单斜杠。 这将导致输出中出现单斜杠。 (例如:在vi中,使用%s/\\/\\\\/g
推理:反斜杠是一个转义字符。 它被用来表示“下一个字符应该从字面上来处理”,以避免星号被当做除了星号以外的东西。 所以把它们中的两个连在一起,结果是第一个表示第二个应该被用作斜杠。
这对你是否可行,还是需要对脚本本身进行更改,而不触摸数据?
读取时使用-r:
cat test.input | while read -r 'line' do echo "$line" done