このコマンドを実行するために.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コマンドだと思います。