특정 문자열에서 각 줄을 자르는 방법은 무엇입니까?

특정 문자열에서 각 줄을 자르는 방법은 무엇입니까?

입력.txt:

john_Apple01_xyz_1
john_Fruit_Apple01_abc_c1
john_Apple21_trs_1
john_Fruit_Apple21_efg_1
john_Fruit_Apple21_tefg_1

원하는 출력:

Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1

줄에서 사과가 발견될 때마다 앞 부분을 잘라내기 위해 nawk 또는 sed를 어떻게 사용합니까?

저는 Solaris 10에서 KSH를 사용하고 있습니다.

답변1

@cuonglm의 댓글다음을 사용하여 이를 수행하는 방법을 설명합니다 sed.

sed -e 's/.*\(Apple\)/\1/' input.txt

좋은 오래된 것을 사용하는 것을 고려할 수도 있습니다 grep.

grep -o 'Apple.*' input.txt

경고 1 - 현재 가지고 있는 Solaris가 없으므로 Solaris에는 grep이 옵션이 없을 수도 있습니다 -o. YMMV.

참고 2 - 입력 파일에 Apples가 전혀 포함되지 않은 행이 있는 경우 해당 행은 출력에 전혀 표시되지 않습니다. 이것이 원하는 동작인지 확실하지 않습니다. 그렇지 않다면 sed대답으로 충분할 것입니다.

답변2

당신은 nawk또는 sed. 언급했듯이 ksh순수 쉘 버전을 만들어 보는 것은 어떨까요?

다음 명령은 POSIX 호환 셸에서 실행됩니다.

p="Apple"
while read line ; do
  case $line in
  (*$p*) echo $p${line#*$p};;
  esac
done <<!
john_Apple01_xyz_1
john_Fruit_Apple01_abc_c1
john_Apple21_trs_1
john_Fruit_Apple21_efg_1
john_Fruit_Apple21_tefg_1
!

그 결과는 다음과 같습니다.

Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1

순수한 껍질

관련 정보