2013-08-03 96 views
0

因此,有人在twitter上提到了這一點。你有一個文本文件,像這樣:如何將文本追加到bash中的多行文件中的單詞

watermelon 
taco 
bacon 
cheese 

要追加文本「小貓」到「塔科」的結束。因此,所需的輸出是這樣的:

watermelon 
tacokitten 
bacon 
cheese 

你怎麼能在bash中做到這一點?

回答

2

沒有什麼特別的關於這個;只需使用sed程序:

sed 's/^\(taco\)$/\1kitten/' inputfile 
+4

沒有理由括號。 's/^ taco $/tacokitten /'或's/^ taco $ /&kitten /'爲什麼? – Kevin

1

雖然sed顯然是一個更好的選擇,在學術上,這裏是如何做到這一點的純慶典(或zsh中):

或稍多地道:

while read line; do 
    [ "$line" = "taco" ] && line=${line}kitten 
    echo "$line" 
done < test.in 

或者在awk

awk '/^taco$/{$0=$0"kitten"}1' test.in 
0

明確:

TARGET_FILE=/path/to/file.txt 
LINENO=1 # line number counter 
NEEDLE="taco" 

for word in $(cat $TARGET_FILE) 
do  
    if [ "$word" = $NEEDLE ] 
    then 
     #echo "Appending $word on line $LINENO..." 
     sed -i "${LINENO}s/.*/${word}TEXTAPPENDED/" $TARGET_FILE 
     break 
    fi 
    LINENO=$((LINENO +1)) #increase line number by 1 
done 
+0

?爲什麼?首先找到行號,然後使用sed in for循環與基於行號的地址來替換字符串?清楚地說,非常不優化。 – anishsane

+0

另外,擺脫$(command)中'for word的習慣;做...';當命令輸出包含空格/製表符時它們失敗。使用'command |同時讀字;做...';甚至更好,「一邊讀字;做...完成<<(命令)' – anishsane

相關問題