我使用FreeBSD,我有一個配置文件,我需要一個班輪,沒有管道,找到一個特定的字符串,如果發現替換,如果不追加到文件。Linux搜索並替換文件中的字符串,如果沒有找到
我看了看不同的選擇一樣,沒有好的工作:
這是我的工作幾乎確定:
gsed -r 's/search/replace/; t; $areplace' 'app.conf'
我遇到的問題是t
命令未按預期工作。因爲如果我在文件內部有字符串「搜索」,它會替換,但它也會附加。如果「搜索」字符串是文件中的最後一個,它將替換,並且不會附加。
編輯 - 增加的採樣
樣品輸入:
ssh_enable="yes"
snmpd_enable="YES"
dumpdev="AUTO"
樣本命令:
gsed -r 's/.*snmpd_enable=\".*\".*/snmpd_enable=\"NO\"/; t; $asnmpd_enable=\"NO\"/' 'app.conf'
預期輸出:
ssh_enable="yes"
snmpd_enable="NO"
dumpdev="AUTO"
實際輸出:
ssh_enable="yes"
snmpd_enable="NO"
dumpdev="AUTO"
snmpd_enable="NO"
編輯 - 解決方案
最後我用@ 123解決方案,
gawk -i inplace '{x+=sub(/search/,"replace")}END{if(!x)print "replace"}1'
但這裏的問題是,如果該文件不包含搜索字符串,它會打印替換。任何ideeas?
添加樣品的輸入和預期的輸出數據 – anubhava
現在只是等待@ anubhava的awk的解決方案: - ) –
但不能用sed來完成嗎?爲什麼t - 命令不能按預期工作? – hDan