【问题标题】:How to double quote the passed variable using sed?如何使用 sed 双引号传递的变量?
【发布时间】:2013-08-23 23:13:44
【问题描述】:

我是脚本新手。我想使用 sed 为传递的变量添加双引号。我已经编写了脚本文件,但它没有插入双引号。我的脚本看起来像

#!/bin/bash

essid=$1
port=$2

sed -i -e "s/\(ssid=\).*/\1$1/" \
-e "s/\(key_mgmt=\).*/\1$2/" iwlist_details.txt 

我想将 ssid = "xyz" 替换为 ssid = "abcd"

network={
ssid="xyz"
key_mgmt=WAP
proto=WPA2
pairwise=CCMP TKIP
group=CCMP TKIP
psk="hello123"

}

当我运行脚本时,我得到以下输出

#./myscrip.sh abc WAP iwlist_details.txt


network={
ssid=abcd
key_mgmt=WAP
proto=WPA2
pairwise=CCMP TKIP
group=CCMP TKIP
psk="hello123"
}

如何在 "abcd" 两边加上双引号?

谢谢 萨钦

【问题讨论】:

    标签: shell scripting sed


    【解决方案1】:

    您没有使用双引号。 sed 应该如何知道你想要它们?要在双引号内使用双引号,请使用反斜杠:

    sed -i -e "s/\(ssid=\).*/\1\"$1\"/" \
       -e "s/\(key_mgmt=\).*/\1\"$2\"/" iwlist_details.txt 
    

    或在单引号内使用它们:

    sed -i -e 's/\(ssid=\).*/\1"'"$1"'"/' \
       -e 's/\(key_mgmt=\).*/\1"'"$2"'"/' iwlist_details.txt 
    

    我不确定你觉得哪个更易读。

    【讨论】:

    • @choroba 你想的是\2,而不是$2。不过,对于第二种解决方案 +1。 user2678235 - 为什么将 $1 和 $2 保存在变量 essidport 中,然后再次显式使用 $1 和 $2 而不是使用 sed 脚本中的变量?
    • @EdMorton:谢谢,我正要离开,注意力不集中:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2011-11-17
    相关资源
    最近更新 更多