다음과 같은 파일이 있다고 가정해 보겠습니다.
foo bar foo bar foo bar foo bar something useful"foo bar foo bar"
something useful
기본적으로 문자열을 개별적으로 가져오는 방법 , 자체 파일에 저장하거나 개별적으로 출력으로 표시하는 방법을 알고 싶습니다 .
something useful
(33) 앞뒤에는 "
항상 같은 수의 문자가 있습니다 .
답변1
이 시도:
cut -c 34- | cut -d '"' -f1
첫 번째는 cut
처음 33자를 제거하고, 두 번째는 cut
첫 번째 "
.
답변2
이것은 grep
Perl 구문을 사용하는 GNU 버전입니다.
grep -oP '.{32}\K[^"]*'
처음 32자를 파악하여 제거 \K
하고 first 까지 나머지 문자를 인쇄합니다 "
.
답변3
Bash 및 매개변수 확장 표현식
$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}" #print everything from offset 32 to the end
답변4
sed를 사용하여 작업을 수행할 수 있습니다
sed -e 's/^.\{32\}//;s/".*//' filename.txt
그러면 처음 32자가 제거되고 첫 번째 문자 이후의 모든 문자가 삭제됩니다 "
.
이러한 대체는 파일의 모든 줄에서 발생합니다. 특정 행에 적용하려면 다음을 사용하십시오.
sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt
linenumber
임의의 숫자는 어디에 있습니까?
linenumber{ # on the linenumber-th line, do the following
s/^.\{32\}// # remove the first 33 characters
s/".*// # remove the first quote and everything following it
}