正确解释换行符

时间:2015-06-12 19:45:59

标签: bash cat xargs

我有一个文件,我需要逐字解析,并只更改某些单词。我的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

2 个答案:

答案 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的替代实现。