숫자로 시작하는 각 열의 시작 부분에 문자를 추가하는 방법:
추가 예 c
:
4 r4 8 8 4
그래서 나는 다음과 같은 결과를 얻습니다.
c4 r4 c8 c8 c4
다양한 수의 열에 대해 작동해야 합니다.
답변1
당신은 그것을 사용할 수 있습니다sed각 열을 한 번에 수정합니다.
sed -E 's/(^| )([[:digit:]])/\1c\2/g' input
필드 구분 기호가 공백이 아닌 경우 (^| )
정규 표현식의 이 부분에 있는 공백을 필드 구분 기호로 바꾸세요.
-E
기본 정규식(BRE) 대신 확장 정규식(ERE)을 사용하도록 지정합니다.s
:s/regexp/replacement/
(^| )
캡처링 그룹의 줄 시작 또는 공백과 일치합니다.([[:digit:]])
캡처 그룹의 숫자 일치\1c\2
첫 번째 캡처 그룹의 내용(\1
), 문자c
, 두 번째 캡처 그룹의 내용(\2
)g
세계적인
결과가 만족스럽고 구현이 이를 지원하면 FreeBSD 또는 macos와 같은 파생물에 추가 하여 파일을 수정할 sed
수 있습니다 . ( 원본 파일을 백업하고 싶은 경우)-i
-i ''
-i.bak
답변2
나는 다음과 같이 -oneliner를 사용합니다 awk
:
echo '4 r4 8 8 4' | awk '{ for (i=1; i<=NF; i++) if ($i ~ /^[0-9]/) $i = "c" $i }1'
도움이 되었기를 바랍니다 :)
답변3
사용행복하다(이전 Perl_6)
~$ raku -pe 's:g / <(^ | \s+)> \d /{$/}c/;' file
#OR
~$ raku -pe 's:g / (^ | \s+) (\d) /$0c$1/;' file
다음은 Perl 계열의 프로그래밍 언어인 Raku로 작성한 답변입니다. 위에서 파일은 한 줄씩 자동 인쇄 플래그를 사용하여 읽습니다 -pe
. 교체는 :g
전역적이며 다음과 같습니다. "줄의 시작 부분 ^
이나 \s+
공백 뒤에 \d
숫자가 나오는 경우 이를 바꾸십시오. "
<(…)>
첫 번째 예에서는 Raku의 캡처 태그를 사용하여 공백 뒤의 일치 항목을 제거했습니다. 결과 $/
일치 개체가 대체 출력되고 그 뒤에 문자가 표시됩니다 c
. 두 번째 예에서는 전체 일치 항목이 두 개의 캡처( $0
및 $1
)에 포함되어 교체로 출력됩니다 $0c$1
.
입력 예:
4 r4 8 8 4
예제 출력:
c4 r4 c8 c8 c4
또는 (보다 명시적으로) 다음은 열 사이의 공백을 "정규화"합니다.
~$ raku -ne 'put .split(/ \s+ /).map: *.subst(/^ \d /, {"c$/" // ""});' file
#OR
~$ raku -ne 'put .split(/ \s+ /).map: *.subst(/^ (\d) /, {"c$0" // ""});' file
먼저 입력 행이 .split
변수 공백( )에 있고, 각 열이 a로 시작하는 열에 \s+
입력되고 , a가 일치 항목 앞에 추가됩니다(여기서는 match-object 또는 를 사용하여). 일치 항목이 정의되지 않은 경우(Raku의 "define-OR" 연산자 사용) 아무것도 삽입되지 않습니다. 반환된 열 사이에 공백이 있습니다.map
subst
^
\d
c
$/
$0
//
""
답변4
echo "4 r4 8 8 4" | sed -E 's/\<([[:digit:]])/c\1/g'