![](/img/trans.png)
[英]How to search for the word in each line of a file and print the next value of it in python
[英]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.