正确解释换行符

Correctly interpret newline characters

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

用正则表达式代替分词怎么样?

$ echo -e "word1 word2
word3" | perl -pe 's/\bword[12]\b/wordX/g'
wordX wordX
word3

虽然这需要 perl,但也有 PCRE 的替代实现。

试试这个:

#!/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