我知道你可以使用bash中的sed更改文本文件中的一行,显示类似的内容;
name =“applicationname”//这不是问题(它有所不同,这就是我使用var的原因)
描述:http://google.com 要么 描述:http://yahoo.com //有时候描绘中的“价值”会有所不同
到
描述:http://mysite.com/depiction.php?package=applicationname //这是我想要实现的格式
使用sed,但我不完全确定如何实现sed。 http://www.gnu.org/software/sed/
编辑:这就是我刚想出来的
sed -i "s!Depiction:.*!Depiction: http://mysite.com/depiction.php?package=$name!" ./inputfile
如果在这个特定的文本文件中,没有'描述:'怎么办? 我如何插入一行:描述:http://mysite.com/depiction.php?package=applicationname?
答案 0 :(得分:1)
您可以这样尝试:删除“描述:”的所有实例,然后追加您想要的行
{
grep -v "Depiction:" filename
echo "Depiction: ..."
} > newfile && mv newfile filename
答案 1 :(得分:1)
我设法得到了许多试验和错误的答案......所以只是为了分享。 :)
if grep -Fq "Depiction:" ./file
then
sed -i "s!Depiction:.*!Depiction: http://mysite.com/depiction.php?package=$name" ./file
else
sed -i 1i"Depiction: http://mysite.com/depiction.php?package=$name" ./file
fi
答案 2 :(得分:0)
from sys import argv, stdout
filename = argv[1]
depiction_found = False
for line in open(filename):
line.replace('foo', 'bar') #I'm not too sure what you're really trying to do
if line.startswith("Depiction: "):
depiction_found = True
stdout.write(line)
if not depiction_found:
stdout.write("Depiction: <correct value here>\n")
答案 3 :(得分:0)
删除它,然后添加,如果您不关心订单。或者使用awk:
awk 'BEGIN{replacement="Depiction: http://mysite.com/depiction.php?package=applicationname"}/^Depiction:/{print replacement;found=1}!/^Depiction:/{print}END{if(!found)print replacement}' < file
或任何其他高阶语言。
答案 4 :(得分:0)
这可能对您有用:
sed -i '/Depiction:.*/{h;s||Depiction: http://mysite.com/depiction.php?package='"$name"'|};$!b;x;/./{x;q};x;a\Depiction: http://mysite.com/depiction.php?package='"$name" ./inputfile
或者也许作为准系统:
sed -i '/foo/{h;s//FOO/};$!b;x;/./{x;q};x;a\FOO' file
本质上:
foo
,请在保留空间(HS)中复制并执行替换。$
),检查保留空间是否有证据或先前的替换,如果没有,则附加一行。