我有一个文件,我需要逐字解析,并只更改某些单词。我的bash脚本适用于所有内容但保留换行符。我构建了一个最小的例子如下:
#!/bin/bash
# contents of myscript.sh
toks=( $* )
for tok in ${toks[*]}; do
# make changes to $tok if need be
printf "$tok "
done
我希望如下使用它:
cat filename.txt | xargs myscript.sh
其中filename.txt可能看起来像
word1 word2
word3
在这种情况下,预期输出与输入相同,但我得到
word1 word2 word3
答案 0 :(得分:2)
试试这个:
#!/bin/bash
while read -ra line; do
for tok in "${line[@]}"; do
# make changes to $tok if need be
printf "%s " "$tok"
done
echo
done
答案 1 :(得分:0)
正则表达式而不是标记化怎么样?
$ echo -e "word1 word2
word3" | perl -pe 's/\bword[12]\b/wordX/g'
wordX wordX
word3
当然这需要perl,但有PCRE的替代实现。