首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash中将文本追加到多行文件中的单词

如何在bash中将文本追加到多行文件中的单词
EN

Stack Overflow用户
提问于 2013-08-03 08:56:23
回答 3查看 231关注 0票数 0

有人在推特上提到了这一点。您的文本文件如下所示:

代码语言:javascript
复制
watermelon
taco
bacon
cheese

您想要将文本"kitten“附加到"taco”的末尾。因此,所需的输出如下:

代码语言:javascript
复制
watermelon
tacokitten
bacon
cheese

在bash中如何做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2013-08-03 09:01:30

这并没有什么特别之处;只需使用sed程序:

代码语言:javascript
复制
sed 's/^\(taco\)$/\1kitten/' inputfile
票数 3
EN

Stack Overflow用户

发布于 2013-08-03 10:30:18

虽然sed显然是一个更好的选择,但从学术上讲,下面是如何用纯bash (或zsh)实现它的:

代码语言:javascript
复制
while read line; do
    if [ "$line" = "taco" ]; then 
        line=${line}kitten
    fi
    echo "$line"
done < test.in

或者说得更地道一些:

代码语言:javascript
复制
while read line; do
    [ "$line" = "taco" ] && line=${line}kitten 
    echo "$line" 
done < test.in

或在awk

代码语言:javascript
复制
awk '/^taco$/{$0=$0"kitten"}1' test.in
票数 1
EN

Stack Overflow用户

发布于 2013-08-03 10:51:12

明确地说:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18028177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档