簡體   English   中英

Python或Shell協助:如何搜索單詞並僅替換單詞旁邊的值

[英]Python or Shell assistance: How to search for a word and replace only the value next to it

我有一個具有以下格式的文本文件(list.txt):

Apple 1
Banana 5.0
orange_1 0.5

該列表可以持續很多行。 我想最終搜索“ Apple”一詞,僅替換其旁邊的值。 我知道如何使用可以搜索和替換單詞的“ sed”命令,但是我不知道如何搜索單詞並僅替換單詞旁邊的值?

我在腳本中使用的sed命令如下:

sed "s/Apple/$1/g" list.txt > newlist.txt 

$ 1是在運行腳本中定義的,可以是任何值(例如grape)。 同樣,這將切換“ Apple”一詞,而不是其旁邊的值。 我希望能夠通過使用SHELL或Python命令來執行此操作。 任何幫助都太棒了!

在這里,我表現出積極的回溯方式,如@ryugie所說:

content = '''Apple 1
Banana 5.0
orange_1 0.5'''


def my_replace(content, fruit, value):
    import re
    return re.sub(r'(?<=' + fruit + ' )([\d\.]+)', str(value), content)


print my_replace(content, 'Apple', 4.0)

print my_replace(content, 'Banana', 1.5)

我們可以得到:

Apple 4.0
Banana 5.0
orange_1 0.5

Apple 1
Banana 1.5
orange_1 0.5

假設每行以鍵開頭,並且值是空格后的其余行,則可以使用以下sed命令僅替換值:

sed "s/\(^Apple \)\(.*$\)/\1$1/"

請注意,這可能是一個脆弱/不安全的解決方案,具體取決於替換值,例如,如果$1包含/ ,它可以用於/;d;s//類的命令插入。

使用awk更強大的解決方案:

awk -v new="$1" '{print ($1 == "Apple") ? ($1 " " new) : $0}'

UPD。 這兩個命令都可以直接或通過標准流使用文件:

sed ... file.txt > new.txt
cat file.txt | sed ... | cat > new.txt

(不要像這樣使用cat ,它在這里顯示管道輸入/輸出)。 此外,某些版本的sed具有選項-i來更改文件位置:

sed -i ... file.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM