sed를 사용하여 문자열의 첫 부분을 제거하십시오.


14

이것을 어떻게 얻습니까?

randomcollege-nt\user90

이에:

user90

사용하여 sed?


2
유용한 팁 : 명령이 무엇인지 확실하지 않은 경우 입력 man the_command_name하면 명령에 대한 유용한 지침 설명서가 제공됩니다. www.google.com으로 이동하여 "command_name tutorial"을 입력하면 다양한 단계별 가이드를 찾을 수 있습니다.
DBedrenko

2
sed방문 튜토리얼 : grymoire.com/Unix/Sed.html
Pandya

답변:


15

나는 간단한 것을 사용 grep하여 찾을 것이다 user90:

$ echo "randomcollege-nt\user90" | grep -o user90
user90

user90이 일정하지 않은 경우 다음 명령을 선호하십시오.

$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90

마지막으로 sed파일을 편집하는 데 사용 합니다.

$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file

또는 가능한 모든 사용자 계정과 일치 시키려면

$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file

재미있는 것은 내가 시도했지만 아무것도 반환되지 않았다는 것입니다. 중요한 경우 12.04를 사용하고 있습니다. grep -F전체 문자열 인 경우에만 나타납니다 .
Roboman1723

@ Roboman1723은 12.04에서 테스트되었으며 첫 번째 명령이 작동합니다. grep 별명이 어딘가에 정의되어 있지 않은지 확인하십시오. BTW는 sed로 인라인 대체를 찾고있는 것처럼 보입니다. 그런 명령을 추가했습니다.
Sylvain Pineau

sed 명령으로 모든 "randomcollege-nt \"를 잘라 내고 사용자 90 이상을 표시 할 수있는 방법이 있습니까? 예 : randomcollege-nt \ user90 randomcollege-nt \ user91 randomcollege-nt \ user92 출력 : user90 user91 user92
Roboman1723

1
@ Roboman1723 원본 파일과 원하는 출력물을 질문에 첨부하여 모든 사람이 파일을 볼 수 있도록 도와주십시오.
Sylvain Pineau

1
@SylvainPineau 나는 첫 번째 명령이 적절하지 않다고 생각합니다.
Avinash Raj

20

domain\usernameWindows에서 문자열 에서 사용자 이름을 추출하기 위해 일부 텍스트를 구문 분석하고 있습니다. 위의 답변 중 대부분은 특정 예제 문자열 만 다루고 있습니다.

이 작업을 수행하는 가장 좋은 방법은 sed에서 정규식을 사용하여 이후에 나오는 것을 추출하는 것 \입니다. 방법은 다음과 같습니다.

sed 's|.*\\\(.*\)|\1|'

.*백 슬래시가 될 때까지 모든 항목 ( ) 과 일치 합니다 (여기서 우리는 이스케이프하므로 \\). 백 슬래시 ( .*) 뒤의 모든 항목을 일치 시키지만 캡처 그룹 (즉, 주위에 대괄호를 묶어야 함)도 탈출해야합니다. 그들 \(.*\)). 이제 \문자열에서 캡처 그룹으로 뒤에 오는 모든 것이 있으므로을 참조하여 인쇄합니다 \1.

반드시 위의 sed명령을 도메인 이름과 함께 사용할 수 있습니다 randomcollege-nt.

$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90

$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username

$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723


9

나는 당신이 sed를 사용하고 싶다는 것을 알고 있지만 다른 것을 사용할 것입니다 ...

echo "randomcollege-nt\user90" | cut -d'\' -f2

1
아는 방법 도구를 사용하는 것은 알고만큼이나 중요 있는 사용에 도구를.
Rafał Cieślak

5

이것이 질문입니까?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

스팅 randomcollege-nt가 일정하지 않은 경우 위 / 아래의 awk 명령을 사용하십시오.


1
내가 얻을 실행하면 /user90되지user90
Roboman1723

2
아니, 괜찮아 user90
saptarshi nag

3

대신 'awk'를 사용하여 "user90"을 필터링하십시오.

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}

파일을 제 위치에서 편집하고 새 파일로 출력 할 필요가없는 awk를 사용하는 방법입니까?
Roboman1723


예, awk에 -f 옵션을 사용해야합니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오.
saptarshi nag

1

이 간단한 grep 명령은 작업을 수행합니다.

$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90

1


sed특정 문자 전에 문자열의 삭제 다 (이중 브라켓 [특정 문자]로 정의).

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

.*[\]문자 앞의 모든 ( ) 문자 \를 공백 문자 ( //)로 바꾸는 것을 의미합니다.

파일이 있고이를 바꾸려면 다음과 같이 명령 -i에서 플래그를 사용 sed하십시오.

sed -i 's/.*[\]//' /path/to/FileName

1

원래 질문은을 요청 sed했지만 대안이 인기가 있음을 알았습니다.

Bash를 사용하는 경우 매개 변수 확장이 가장 간단합니다.

ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"

잠재적으로 둘 이상의 백 슬래시가 예상되는 경우 해시 부호를 두 배로 늘리십시오.

echo "${ORIGIN##*\\}"

자세한 내용을 보려면 man bash을 검색하십시오 Parameter Expansion.


0

누구나 # server_tokens off;자동 개발자를 돕기 위해 nginx에서 주석 처리 된 주석을 자동으로 제거하려고하는 경우 :

sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf.

우분투 16.04 LTS에서 nginx / 1.12.1 테스트 및 작동 여기 에서 서버 토큰을 해제하여 NGINX를 잠그는 것과 관련된 답변 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.