다음과 같은 파일이 있고 두 번째 위치의 쉼표를 #으로 바꾸고 싶습니다.
1K,1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K,2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K,3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K,8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K,9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
나는 이것을 시도했지만 쉼표 앞의 문자를 제거했습니다.
sed 's/^\(.\{2\}\),/\#/' input_file
달성된 결과:
#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
원하는 결과:
1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
답변1
,
실제로 바꿔야 할 쉼표가 #
바로 그 위치에 있습니다.삼:
sed 's/^\(..\),/\1#/' input_file
^
- 스트링 앵커의 시작(..)
- 첫 번째 캡처된 그룹에는 처음 2개의 문자가 포함됩니다.\1
- 첫 번째 캡처링 그룹 참조
산출:
1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
답변2
sed 's/^\(..\),\([0-9]\)/\1#\2/' input_file
정규식에 익숙하지 않은 것 같습니다. 물어보면 안되는 질문만큼이나 간단합니다.
답변3
use below command to get the desired result
input file u.txt
1K,1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K,2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K,3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K,8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K,9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
command: sed "s/,/#/1" u.txt
sed "s/,/#/1" u.txt
1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10#,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11#,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12#,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18#,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03
답변4
모든 "K"가 "K#"이어야 하는 패턴을 만들 수 있다면 다음과 같이 sed
대체할 수 있습니다.
sed 's/K,/K#/g' input_file