bash에서 문자 다음에 모든 텍스트를 제거하려면 어떻게합니까? 어떻게 제거 할 수

bash에서 문자 뒤의 콜론 ( “:”) 뒤의 모든 텍스트를 어떻게 제거 할 수 있습니까? 콜론도 제거 할 수 있습니까? 나는 방법을 모른다.



답변

예제가 유용했을 수도 있지만, 올바르게 이해하면 다음과 같이 작동합니다.

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

“hello : world”를 “hello”로 변환합니다.


답변

Bash (및 ksh, zsh, dash 등) %에서 문자열의 끝에서 #문자를 제거 하거나 문자열 의 시작에서 문자를 제거 하는 매개 변수 확장을 사용할 수 있습니다 . 해당 문자 중 하나를 사용하면 일치하는 가장 작은 문자열이 제거됩니다. 문자를 두 배로 늘리면 가장 긴 문자가 제거됩니다.

$ 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:again' |sed 's/:.*//'
hello

답변

egrep -o '^[^:]*:'

답변

이 형식의 파일 경로가 있다고 가정 해 봅시다.

/dirA/dirB/dirC/filename.file

이제 네 개의 “/”를 포함하는 경로 만 원합니다. 유형

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

그리고 당신의 출력은

/dirA/dirB/dirC

cut을 사용하면 파일뿐만 아니라 uppest 디렉토리도 잘라낼 수 있다는 장점이 있습니다.

$ 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

다른 경우에는 마지막 경우도 도움이 될 수 있습니다. 마지막 출력의 시작 부분에 “/”가 없다는 점에 유의하십시오.


답변

“:”의 마지막 인스턴스 이후에 모든 것을 다듬습니다.

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

마지막 “:”을 삭제하려면

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

@ kp123 : 교체 할 것 :으로 /합니다 (나오지도 콜론이 있어야 할 곳에 \/)