Linux 명령은 Trim/Cut/sed를 사용하여 파일에서 소량의 데이터를 잘라냅니다.

Linux 명령은 Trim/Cut/sed를 사용하여 파일에서 소량의 데이터를 잘라냅니다.

내 내용은 다음과 같습니다/tmp/myfileslist

test1/a/sample1.xls
test2/demo.sh

슬래시와 슬래시도 제거되기 전에 .extensions 및 콘텐츠를 제거하고 싶습니다. 나는 출력을 원한다.

sample1
demo

답변1

( awk그리고 중복이 없다고 가정)가리키다기록에 접미사를 붙이 /path/to/some.example.txt세요. 예를 들어 ""부분"만)

awk -F'[/.]' '{ print $(NF-1) }' infile

해당 기록이 있는 경우 아래 기록을 대신 사용하시기 바랍니다.

awk -F'/' '{ sub(/.[^.]*$/, ""); print $NF }' infile

답변2

귀하의 cut방법에는 필드 수가 행마다 변경되는 문제가 있습니다.

또한 "파이프를 사용하지 말고 cat" 파일 이름을 텍스트 처리 명령의 속성으로 사용하십시오.

.*/두 단계에 걸쳐 슬래시( ) 앞의 모든 항목을 제거한 다음 \..*점( )으로 시작하는 모든 항목을 제거합니다 .

 sed 's_.*/__;s_\..*__' /tmp/myfilelist

(이것은 모든 확장명을 제거하고 .만 원한다고 가정합니다 foo. foo.tar.gz)

답변3

자르다

cut각 행을 먼저 뒤집으면 다음과 같이 마지막 요소를 가져올 수 있습니다.

<filelist.txt rev | cut -d/ -f1 | rev

이제 다음과 같이 파일 확장자를 제거할 수 있습니다.

<filelist.txt rev | cut -d/ -f1 | rev | cut -d. -f1

세게 때리다

또한 다음을 사용할 수 있습니다 cut.sedBash 매개변수 확장다음과 같이 경로 파일 확장자를 제거합니다.

while read f; do
  f="${f##*/}"
  f="${f%.*}"
  printf '%s\n' "$f"
done < filelist.txt

팁: ${f%%.*}모든 확장 프로그램을 제거하는 데 사용됩니다.

답변4

사용행복하다(이전 Perl_6)

~$ raku -ne 'put .IO.extension("").basename;'  file

#OR (below handles up to 8-part extensions):

~$ raku -ne 'put .IO.extension("", :parts(^9)).basename;'  file

입력 예:

/test1/a/sample1.xls
/test2/demo.sh
/some/file.txt
/whatever/prog.c
/something/abc.tar.bz
/something/abc.123.456.789.tar.bz
/something/abc.c
/something/abc.h
/path/to/file.10.5.2.tar.gz
/path/to/file.10.5.2.tar.gz.whatever
/path/to/file.10.5.2.tar.gz.whatever.7.pdf
/noextension

예제 출력:

sample1
demo
file
prog
abc
abc
abc
abc
file
file
file
noextension

즉, 자동 인쇄가 아닌 한 줄씩 플래그를 사용하여 파일을 한 줄씩 읽습니다 -ne. 코드는 각 줄에서 실행됩니다. 먼저 경로는 IO식별/수정될 수 있는 객체로 해석됩니다 . 매개변수 extension내에서 extension식별된 부품은 ""교체(즉, 삭제)되지 않습니다. 매개변수("부사"라고도 함)를 추가하면 :parts여러 부분으로 구성된 파일 확장자를 인식할 수 있습니다. 마지막으로 basename이를 분리하려면 경로의 모든 부분(슬래시 이상)을 제거합니다.

Raku는 운영 체제별 설정을 통해 파일 경로를 이해하므로 위의 코드는작동해야 한다Windows 경로에서 올바른 요소를 추출하기 위해 Windows에서 수정되지 않았습니다(Raku는 Windows 운영 체제에서 백슬래시를 경로 구분 기호로 이해합니다).

https://docs.raku.org/type/IO/Path
https://docs.raku.org/routine/basename
https://docs.raku.org/routine/extension
https://raku.org

예제 소스:
https://unix.stackexchange.com/a/731665/227738

관련 정보