다음과 같은 데이터가 포함된 파일이 있습니다. https://pastebin.com/TXrmVpwF 내가 달성하고 싶은 것은 패턴이 있지만 이름에 확장자나 점이 없는 모든 줄을 찾아 삭제하고, true인 경우 그 뒤의 빈 줄을 삭제하는 것입니다.
무늬:
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
답변1
파일이 Unix 텍스트 파일(DOS 텍스트 파일이 아닌 경우 dos2unix
먼저 실행해야 함)이라고 가정합니다.
sed '/^#/{ /\./!{ N; /\n$/d; }; }' <file
주석이 달린 sed
스크립트:
/^#/{ # The current line starts with a "#"
/\./!{ # The current line does not contain a dot
N; # Append next line with a \n in-between
/\n$/d; # The line just appended was empty, delete, start next cycle
}
}
# (implicit print)
디렉토리 이름에는 점이 허용되지만 마지막 경로 이름 부분에는 점이 허용되지 않는 경우(즉, # /x.x/text
뒤에 빈 줄이 있으면 제거해야 함) /\./
로 변경합니다 /\.[^/]*$/
.
답변2
질문에 대해 잘 모르겠지만 대답은 다음과 같습니다.
grep -v '\.' TXrmVpwF | grep -e '/'
grep -v '\.'
: 점이 있는 줄을 필터링합니다.
grep -e '/'
: 나머지 경로를 가져옵니다.
결과는 다음과 같습니다.
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
# /x/123/100
# /x/123/103
# /x/123/1333