2015-06-12 3 views
0

У меня есть файл, который мне нужно разборчиво, слово за словом и вносить изменения только в определенные слова. Мой скрипт 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

Quote ваши переменные. Напишите их. Также не используйте '$ *', если вы хотите, чтобы позиционные аргументы безопасно использовали '' $ @ "'. –

+0

, если вы четко выразили свою потребность, я принимаю решение о вашей реализации. Вам не нужно идти словом, да? Просто используйте расширенное регулярное выражение со словом. –

+0

Я немного смущен о '' $ @ "' - я использую 'toks = (" $ @ ")' now и получаю тот же результат. Что касается словесного слова, мне, возможно, не нужно это делать, но так я начал его. Мое намерение состоит в том, чтобы написать команду, которая будет принимать любое количество аргументов и изменить * только * слова, соответствующие определенному шаблону, целым целям определенного характера. Я начал его, независимо глядя на каждое слово и меняя его, если нужно. – drjrm3

ответ

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 
+0

И вызывать его с 'cat filename.txt | myscript.sh' (или 'myscript.sh

+0

@thatotherguy: Спасибо за цитаты. – Cyrus

0

Как насчет регулярного выражения вместо токенизации?

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

Предоставлено это требует perl, но существуют альтернативные варианты реализации PCRE.

Смежные вопросы