awk
text 를 사용하거나 서식을 지정하고 싶습니다 sed
. 내 텍스트는 다음과 같습니다.
H1 (dxfault)
H337 (Unxr)
H1106 (hast)
H1129 (h1129)
H1370 (hlan1370)
H
이 편지 와 그 이후의 모든 것을 삭제하고 싶습니다첫 번째 공간, 형식 번호는 다음과 같습니다.1,337,1106,1129,1370
sed
두 가지 다른 옵션을 찾았습니다
첫 번째:
sed 'y/H/ /' #for removing H letter in front
두번째:
sed 's/\s.*$//' #for removing everything after first break "space"
이러한 명령을 결합하고 숫자 뒤에 쉼표를 추가하려면 어떻게 해야 합니까?
답변1
sed
다음을 사용하여 숫자만 가져오고 paste
행을 구분 기호로 병합 할 수 있습니다 ,
.
sed -E 's/^H([0-9]*).*$/\1/' file | paste -sd,
또는 grep
및 paste
:
grep -Po '^H\K[0-9]*' file | paste -sd,
grep -o '^H[0-9]*' file | cut -c 2- | paste -sd,
당신은 할 수,
다음과 같이 개행 문자를 바꾸세요.sed
, 하지만 내 생각엔 paste
그게 더 쉬운 것 같아.
답변2
또는 sed
/ grep
사용 tr
:
$ sed -E 's/H([0-9]+).*/\1/' file | tr '\n' ,
$ grep -o '[0-9]\+\s' file | tr -s '\n ' ,
tr '\n' ,
줄 바꿈을 쉼표로 바꾸십시오.tr -s '\n ' ,
줄 바꿈과 공백을 쉼표로 바꾸십시오.
답변3
나는 다음 방법으로 그것을했다
sed -e "s/H//g" -e "s/\s.*//g" filename | perl -pne "s/\n/,/g"| sed "s/,$//g"
산출
1,337,1106,1129,1370
답변4
를 사용하세요 sed
. 모든 문자를 사용할 수 있다고 가정하지만 공백은 1개만 가능합니다....
sed -E "s/^H(.+) .*$/\1/g" filename | paste -sd,
차라리 grep
첫 번째 공백이 발견될 때까지 모든 문자를 허용하고 일치 항목을 추출하도록 선택합니다.
grep -Po "(?<=^H)[^ ]*" filename | paste -sd,