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 명령이라고 생각합니다 .

관련 정보