@
나는 큰 파일을 가지고 있고 특정 임계값보다 짧은 각 줄 앞에 문자를 추가하고 싶습니다 .
예를 들어 다음 파일이 있다고 가정해 보겠습니다.
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자 이하입니다.