programing

bash 문자 뒤에 있는 텍스트를 모두 삭제하려면 어떻게 해야 합니까?

firstcheck 2023. 4. 8. 15:40
반응형

bash 문자 뒤에 있는 텍스트를 모두 삭제하려면 어떻게 해야 합니까?

bash에서 문자(이 경우 콜론(":)) 뒤에 있는 텍스트를 모두 삭제하려면 어떻게 해야 합니까?결장도 제거할 수 있나요?어떻게 해야 할지 모르겠어요.

Bash(및 ksh, zsh, 대시 등)에서는 파라미터 확장을 다음과 같이 사용할 수 있습니다.%문자열 끝에서 문자를 삭제합니다.#문자열 선두에서 문자를 삭제합니다.이러한 문자 중 하나를 사용하면 일치하는 최소 문자열이 제거됩니다.문자를 두 배로 하면 가장 긴 문자가 삭제됩니다.

$ a='hello:world'

$ b=${a%:*}
$ echo "$b"
hello

$ a='hello:world:of:tomorrow'

$ echo "${a%:*}"
hello:world:of

$ echo "${a%%:*}"
hello

$ echo "${a#*:}"
world:of:tomorrow

$ echo "${a##*:}"
tomorrow

예를 들어 도움이 될 수도 있었지만, 제가 제대로 이해했다면, 다음과 같이 할 수 있었을 것입니다.

echo "Hello: world" | cut -f1 -d":"

변환됩니다.Hello: world안으로Hello.

$ echo 'hello:world:again' |sed 's/:.*//'
hello

몇 가지 해결책을 알고 있습니다.

# Our mock data:
A=user:mail:password
  1. 송곳니 및 파이프 포함:
$ echo $A | awk -v FS=':' '{print $1}'
user
  1. bash 변수 경유:
$ echo ${A%%:*}
user
  1. 파이프 SED 포함:
$ echo $A | sed 's#:.*##g'
user
  1. 파이프 및 GREP 포함:
$ echo $A | egrep -o '^[^:]+'
user
  1. 파이프 및 절단 포함:
$ echo $A | cut -f1 -d\: 
user
egrep -o '^[^:]*:'

":"의 마지막 예 뒤에 있는 모든 것을 잘라내다.

grep -o '^.*:' fileListingPathsAndFiles.txt

그리고 마지막 ":"를 빼고 싶다면요.

grep -o '^.*:' file.txt | sed 's/:$//'

@kp123: 교환이 필요한 경우:와 함께/(SED 결장이 있어야 할 곳)\/)

다음과 같은 형식의 파일을 가진 경로가 있다고 가정합니다.

/dirA/dirB/dirC/filename.file

이제 4개의 "/"를 포함하는 경로만 필요합니다.유형

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"

출력은 다음과 같습니다.

/dirA/dirB/dirC

잘라내기를 사용하면 파일(이 예에서는)뿐만 아니라 최상위 디렉토리도 잘라낼 수 있기 때문에 다음과 같이 입력합니다.

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"

출력은 다음과 같습니다.

/dirA/dirB

스트링의 반대쪽에서도 같은 작업을 할 수 있지만, 이 경우는 타이핑으로 하는 것이 그다지 의미가 없습니다.

$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"

을 낳다

dirA/dirB/dirC

다른 경우에는 마지막 사례도 도움이 될 수 있습니다.마지막 출력 시작 부분에는 "/"가 없습니다.

언급URL : https://stackoverflow.com/questions/4168371/how-can-i-remove-all-text-after-a-character-in-bash

반응형