이 명령이 무엇을 의미하는지 설명해주세요. 이것은 나에게 악몽입니다.

이 명령이 무엇을 의미하는지 설명해주세요. 이것은 나에게 악몽입니다.
sed -e"s@uid=[0-9]*(@@g"-e"s@).*\$@@g"

나는 노력했다

s= 검색

[0-9]*= 0-9로 시작하는 숫자만 검색

답변1

귀하의 명령은 sed아무 이유 없이 ("검색"이 아닌 교체) 명령 @에 대한 구분 기호로 사용되어 s///읽기가 어렵습니다.

두 번째 공백 앞의 누락된 공백이 -e오타이고 문자열에 가독성을 위해 더 많은 공간을 제공한다고 가정하면 다음과 같습니다.

sed -e "s@uid=[0-9]*(@@g" -e "s@).*\$@@g"

이는 다음과 관련이 있습니다.

sed -e "s/uid=[0-9]*(//g" -e "s/).*\$//g"

작은따옴표가 있는 문자열은 다음과 같습니다.

sed -e 's/uid=[0-9]*(//g' -e 's/).*$//g'

(참고 \$$) 또는

sed 's/uid=[0-9]*(//g; s/).*$//g'

따라서 다음은 sed두 개의 편집 표현식을 사용하는 호출입니다.

  1. s/uid=[0-9]*(//g

    uid=이는 숫자 뒤에 오는 모든 하위 문자열을 대체하고 a는 (아무 것도 대체하지 않습니다(해당 문자열은 삭제됩니다). 후행을 사용하면 g첫 번째 일치 항목뿐만 아니라 라인의 겹치지 않는 모든 일치 항목에 대해 이 작업이 수행됩니다.

    uid=1(a) uid=2(b)
    

    로 변환되다

    a) b)
    
  2. s/).*$//g

    이렇게 하면 )줄의 처음부터 끝까지 아무것도 없는 것으로 대체되어 모든 내용이 제거됩니다. g줄 끝 부분에 대한 고정으로 인해 표현식이 한 번만 일치하도록 보장되기 때문에 여기서는 이것이 필요하지 않습니다 $.

    위의 예는 다음과 같습니다.

    a) b)
    

    지금 바로 입장하세요

    a
    

    g이로 인해 각 명령의 후행이 너무 많은 사후 판단 없이 추가되었다고 믿게 됩니다 (두 번째 명령은 확실히 필요하지 않으며 두 번째 표현식은 첫 번째 명령의 모든 것을 )제거 합니다).첫 번째 g불균형 괄호가 있는 데이터를 처리하지 않는 한 아무런 효과가 없습니다. 이것들은 아마도 제거되어야 할 것입니다.

추가 예로, 명령은 다음과 같이 변경됩니다.

this is (line 1) of the file
hello world uid=09(a)  uid=213(b)

입력하다

this is (line 1
hello world a

이 명령의 컨텍스트에 대해 더 잘 모릅니다(어디에서 보았는지, 무엇인지)~해야 한다등), 이에 대해 더 자세히 말하거나 개선 사항을 제안하기는 어렵습니다.

답변2

나는 그것이 다음을 포함하는 라인/변수를 얻으려고 시도하고 있다고 생각합니다.

uid=500(존 스미스)

...다음과 같이 단순화합니다.

존 스미스

대괄호 외부의 모든 항목과 대괄호 자체를 제거하여 대괄호 내부에서 실제/사용자 이름을 추출하려고 시도합니다.

물론, 숫자는 임의의 숫자일 수 있고 이름은 임의의 이름일 수 있습니다.

관련 정보