임계값보다 짧은 모든 줄에 문자열을 추가합니다.

임계값보다 짧은 모든 줄에 문자열을 추가합니다.

@나는 큰 파일을 가지고 있고 특정 임계값보다 짧은 각 줄 앞에 문자를 추가하고 싶습니다 .

예를 들어 다음 파일이 있다고 가정해 보겠습니다.

dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

길이가 10자 이하인 모든 줄을 수정하고 싶습니다. 그러면 출력은 다음과 같아야 합니다.

@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

답변1

임계값이 "10자 이하"라고 가정하면 사용할 수 있습니다.

sed '/^.\{1,10\}$/s/^/@/' input.txt 

이는 주소 지정자를 사용하여 /^.\{1,10\}$/1~10자를 포함하는 줄만 처리 한 다음 "줄 시작"을 로 "바꿉니다" @.

또는 @terdon이 지적했듯이:

sed 's/^\{1,10\}$/@&/' input.txt

이렇게 하면 1~10자를 포함하는 모든 줄이 로 바뀌고 @그 뒤에"그 자체"( &). 이 접근 방식은 처리할 정규 표현식만 포함하므로 아마도 (약간) 더 빠를 것입니다.

다음을 사용할 수도 있습니다 awk.

awk 'length($0)<=10 {printf "@"}1' input.txt 

이렇게 하면 대부분의 행이 그대로 인쇄되지만 10자 이하인 행에서는 @먼저 인쇄됩니다.

답변2

당신은 그것을 사용할 수 있습니다 sed:

# the threshold is the '5'
$ sed '/^.\{1,5\}$/s/^/@/' file
@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

답변3

사용실행할 수 있는 유틸리티는 다음과 같습니다.

awk '/.{10}./||($0="@"$0)' file

스트림 편집기sed동일한 작업을 수행할 수 있습니다.

sed -e '
  s/./&/11;t
  s/^/@/
' file
  • 접두사를 트리거하는 임계값은 10자 이하입니다.

관련 정보