저는 컴퓨터에 어떤 소프트웨어도 설치할 수 없는 회사에 근무하고 있는데, 그곳에서 사용하는 Windows는 형편없습니다.
인트라넷에서 복사한 많은 텍스트를 정리해서 txt 파일로 저장해야 합니다. 그래서 저는 sed
다음과 awk
같은 온라인 라이브 편집기를 사용해야 합니다 .이것또는이것
이 말은 이렇습니다.
01
010010-26.2010.501.0026 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
fdfsadf adsf adsf asdf asdfas fadsf asdfa
02
0011-15.2016.501.0012 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
asdfasd fasd asasdff
asdfasd fasd asasdff
0011-125.2013.501.0012
asdfasd fasd asasdff
이런 숫자를 보는 것이 0011-15.2016.501.0012
내가 원하는 것입니다. 나머지는 신경쓰지 않지만 이 모든 숫자를 한 줄에 하나씩 포함하여 깨끗한 새 텍스트를 만들고 싶습니다. 이전 예에서는 텍스트가 필요했습니다.
010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012
모든 숫자에서 는 .501.
항상 네 번째 그룹으로 나타납니다.
sed 온라인 편집기에서 이 명령을 시도했습니다.
's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\)/\1/'
작동 안함.
답변1
작동하지만 아무 것도 변경하지 않거나 원래대로 변경합니다. 하지만 이 코드를 조금만 수정하면 원하는 것을 얻을 수 있습니다.
sed -n 's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\).*/\1/p'
세 가지 사항에 주의하세요.
-n
스위치는 기본적으로 아무것도 인쇄하지 않음을 의미합니다..*
선택한 그룹의 끝에서(...)
p
마지막 명령은 이 줄을 인쇄한다는 뜻입니다.
결과:
010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012
그런데, 확장 정규 표현식을 추가하고 사용하면 조금 단순화할 수 있습니다 -E
. 즉, 캡처 그룹 앞의 백슬래시를 제거하면 됩니다.
sed -E -n 's/([0-9]*-[0-9]*\.[0-9]*\.501\.[0-9]*).*/\1/p'
위의 웹페이지에서는 두 가지 방법 모두 작동합니다.
답변2
AWK를 사용하는 것은 매우 간단합니다. b/c는 일반적으로 AWK가 아무 작업도 수행하지 않으므로 언제 수행해야 하는지 알려주기만 하면 됩니다. 즉, ID가 존재하는 경우 줄 시작 부분에 ID를 인쇄하는 것입니다.
/^[0-9]+-[0-9]+\.[0-9]+\.501\.[0-9]+/{
print $1
}
sed와는 약간 다릅니다. b/c 기본적으로 sed는 모든 것을 인쇄합니다. (적어도 이 도구가 저에게는 그렇게 작동합니다.) 먼저 기본 동작을 아무것도 하지 않도록 변경 sed
하려면 as 를 호출해야 합니다. sed -n
그럼 우리는 할 수 있어
s/^\([0-9]\+-[0-9]\+\.[0-9]\+\.501\.[0-9]\+\).*$/\1/p
p
마지막에 sed에게 말해야 합니다피일치하는 패턴이 있으면 결과가 인쇄됩니다. 귀하의 특정 sed 표현은 다음과 같습니다아니요모든 일치 항목을 자체적으로 대체하고 다른 모든 항목을 있는 그대로 인쇄하기 때문입니다.