입력하다:
$ cat a.txt
FOO<td align="right" style='mso-number-format:"\[$-409\]m\/d\/yy\\ h\:mm\\ AM\/PM\;\@";' x:str>BAR
산출:
$ sed 's/SOMEMAGIC//g' a.txt
FOOBAR
내 질문:그 끔찍한 "<tdalign..." 부분을 어떻게 제거할 수 있나요? 이게 나를 미치게 만들고 있어!
답변1
음, 확실히 간단합니다.
sed -i 's/<.*>//' file
여기서는 너무 많이 설명하지 않겠습니다.
- 이것이
<
우리가 일치시키려는 부분의 시작입니다 .*
임의의 문자(.
) 및 임의의 숫자(*
)를 나타냅니다. 이것은 모기를 죽이는 대포이지만 비전적이지 않은 예에도 작동해야 합니다.>
경쟁이 끝났습니다.
실시간 방송은 다음과 같습니다.
➜ ~ cat test
FOO<td align="right" style='mso-number-format:"\[$-409\]m\/d\/yy\\ h\:mm\\ AM\/PM\;\@";' x:str>BAR
➜ ~ sed 's/<.*>//' test
FOOBAR
답변2
이것을 사용할 수도 있습니다.
sed 's/^\([^<]*\)<.*>\(.*\)$/\1\2/g' file
설명하다:
^\([^<]*\)<
- <
시작 위치부터 0이 아닌 문자 또는 그 이상의 문자를 추출 <
하고 최종적으로 추출된 문자를 그룹에 저장합니다.
.*>
- 찾을 때까지 문자를 0번 이상 일치시킵니다 >
.
\(.*\)$
- sed가 문자를 찾으면 >
마지막 문자까지의 모든 문자를 다른 그룹에 저장하기 시작합니다(>
>
및 사이에 문자를 저장합니다.$
).
마지막으로 역참조로 sed
저장된 그룹( , )만 인쇄합니다 \1
.\2
예:
$ cat file.txt
FOO<td align="right" style='mso-number-format:"\[$-409\]m\/d\/yy\\ h\:mm\\ AM\/PM\;\@";' x:str>BAR
$ sed 's/^\([^<]*\)<.*>\(.*\)$/\1\2/g' file.txt
FOOBAR
답변3
일방 perl
통행:
$ perl -F'<.*>' -anle 'print @F' file
FOOBAR
<.*>
여기서는 줄을 삭제하는 대신 정규식을 구분 기호로 사용하여 줄을 분할합니다 .
답변4
sed -i 's/\(A\) B \(C\)/\1\2' /path/to/example.file
이렇게 하면 문자열 A와 C는 변경되지 않고 그대로 유지되고 문자열 B가 절단됩니다. 문자를 원하는 문자열/정규식으로 바꾸세요.
예
$ echo A B C | sed 's/\(A\) B \(C\)/\1\2'
$ AC