Linux에서 구분 기호 앞의 텍스트를 삭제하는 방법


16

구분 기호 앞에 줄에서 텍스트를 삭제해야합니다.

예를 들면 다음과 같습니다.

(123434): hello::{apple,orange,mango}.

먼저 텍스트를 삭제해야합니다 :. 즉 (123434).

이 작업을 수행하기 위해 리눅스에 어떤 명령이 있습니까?


당신은 보길 원하는 것일 수도 sed또는awk

이 텍스트는 파일 또는 bash 변수의 일부입니까?
Bernhard

파일의 일부입니다.
user80538

답변:


14

sed명령은 트릭을 수행해야합니다. 다음 명령은 파일을 덮어 씁니다.

sed -i 's/^[^:]*:/:/' file

출력 만 인쇄하려면 -i플래그를 제거하십시오 . 출력을 새 파일에 넣으려면 -i플래그를 제거 하고 출력을 리디렉션하십시오.

sed 's/^[^:]*:/:/' file > new_file

라인은 마술을
행했다

sdiff를 사용하여 두 파일을 비교할 때 두 파일에서 텍스트를 제거한 후 차이가 나에게 제거 된 텍스트를 표시합니다. 이 명령은 파일을 덮어 쓰거나 출력 만 표시합니다.
user80538

위의 명령을 간단히 변경하여 예제에서 'hello'및 {apple, orange, mango}를 추출 할 수 있습니까?
user80538

@ user80538, 이 맥락에서 추출 을 말할 때 원하는 것을 말하기는 어렵습니다 . 이 부분이 더 큰 쉘 스크립트입니까? 해결하려는 더 큰 문제에 대한 세부 정보를 사용하여 새로운 질문을 할 수 있습니다.
drs

동일한 데이터를 가진 두 파일의 간단한 비교 일 뿐이지 만 두 파일에서 데이터가 다른 위치 만 찾으면됩니다. 줄의 각 개별 섹션을 확인해야합니다. 개별 섹션의 데이터가 뒤죽박죽 일 수 있습니다. {apple, orange, mango}와 같이 {apple, mango, orange} 일 수 있습니다.
user80538

14

당신은 사용할 수 있습니다 cut:

echo '(123434): hello::{apple,orange,mango}.' | cut -d: -f2-

5

아주 간단한 Bash 명령 으로이 작업을 수행 할 수 있습니다 .

mytext="(123434): hello::{apple,orange,mango}."

echo ${mytext#*)}

인쇄 : hello::{apple,orange,mango}.됩니다. 접두사와 접미사를 비슷한 방식으로자를 수 있습니다. 또한 접두사 및 접미사 정의에는 와일드 카드가 포함될 수 있습니다.

접두사 자르기-첫 번째 접두사 와일드 카드 일치 : ${variable#prefix}

접두사 잘라 내기-마지막 접두사 와일드 카드 일치 : ${variable##prefix}

접미사 컷-첫 번째 접미사 와일드 카드 일치 : ${variable%suffix}

접미사 컷-마지막 접미사 와일드 카드 일치까지 : ${variable%%suffix}

처음에는 불분명하게 보일 수 있습니다. 다음 예를 참조하십시오.

mytext="xAxBxAxBx"
echo ${mytext#*A}    # will print: xBxAxBx
echo ${mytext##*A}   # will print: xBx
echo ${mytext%B*}    # will print: xAxBxAx
echo ${mytext%%B*}   # will print: xAx
echo ${mytext%%C*}   # will print: xAxBxAxBx

마지막 예에서 패턴이 일치하지 않으므로 잘라 내지 않습니다.


사용하는 것이 더 강력합니다 echo ${mytext#*:}:. 이것은 제대로 같은 라인 처리 할 (123)(434): hello::{apple,orange,mango}.123434: hello::{apple,orange,mango}.
drs

예제에서 echo $ {mytext %% B *} 명령을 수정하여 B 다음에 텍스트를 가져올 수있는 방법이
있습니까?

@ user80538 그렇습니다. ;-)를 포함하여 B 앞에있는 텍스트를 잘라내십시오. 즉, 첫 번째 B 이후의 텍스트 인 경우 $ {mytext # * B}, 두 번째 B 이후의 텍스트 인 경우 $ {mytext ## * B}입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.