sed パラメーターの Bash 文字列の置換: Sed: 不明なコマンド: ""

sed パラメーターの Bash 文字列の置換: Sed: 不明なコマンド: ""

このコマンドを実行するために.bashrcに関数を作成しようとしています。

lspci -kvnn | sed -n '/VGA/,/^$/ p'

、これはVGA最初のパラメータに置き換えられます$1

これが私が思いついたものです:

lsp(){
    sed_str="'/$1/,/^$/ p'"
    echo $sed_str
    lspci -kvnn | sed -n $sed_str
    return
}
export -f lsp

トラブルシューティングのために関数が失敗する理由を理解できません。echo $sed_str出力は、最初のコマンドの正規表現と同じです。sedはまだ文句を言います。

[user@linux ~]$ lsp VGA
'/VGA/,/^$/ p'
sed: -e expression #1, char 1: unknown command: `''
[user@linux ~]$ 

おそらくここには見えないものが明らかになるでしょう。

カーネルとシェル:

uname -r      -> 5.8.14-arch1-1
echo $SHELL   -> /bin/bash

答え1

引用符は区切り文字ではなく文字列に含まれています。文字列を定義して使用するには、引用符を使用する必要があります。

lsp(){
    sed_str="/$1/,/^$/ p"
    echo $sed_str
    lspci -kvnn | sed -n "$sed_str"
    return
}
export -f lsp

答え2

>>> sed_str="/$1/,/^\$/p"

>>>> lspci -kvnn | sed -n "$sed_str" 
    

一重引用符が問題の原因です。また、$sed_str 拡張後の単語の区切りやファイル名の拡張を防ぐために、変数を二重引用符で囲む必要があります。

変数を引用しなかったため、シェルには次のように表示されます。

 ... ¦ sed -n '/VGA/,/^$/ 'p

arg1 =   -n
arg2 =  '/VGA/,/^$/
arg3  = 'p

2と3はsedには適していません。'それはsedコマンドだと思います。

関連情報