문자열에서 문자 제거

문자열에서 문자 제거

Bash의 다음 문자열에서 숫자와 마침표를 제거하는 방법을 아는 사람이 있습니까?

3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315

기간 이후의 숫자는 변경하지 않고 그대로 둡니다. 또한 결과를 파일 대신 변수에 저장하고 싶습니다.

답변1

배쉬에서, 공백으로 구분된 값을 배열로 읽어온 다음 선행 문자를 제거하는 매개변수 대체를 사용하여 배열의 요소를 확장할 수 있습니다.

read -a vals <<< '3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315'

var="${vals[@]#*.}"

echo "$var"
302279 302329 302829 302829 303206 303130 303175 303398 303315 303420 303485 303479 303513 303518 302973 303185 303349 303398 303518 303518 303503 303519 303519 303130 303521 303521 303521 303185 303185 303185 303185 303185 303185 303185 303185 303185 303185 303523 303185 303185 303175 303185 303523 303522 303185 303185 303420 303185 303185 303185 303526 303185 303185 303185 303185 303185 303527 303525 303525 303479 303315 303315 303315 303315 303315

답변2

MYVAR=`sed -E 's/[0-9]+.([0-9]+)/\1/g' stringfile`

답변3

var a가 전체 숫자 목록인 경우:

$ a='3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315'

그런 다음 b를 a의 숫자 배열로 바꿀 수 있습니다.

$ b=( $a )

그리고 선행 정수 없이(점 앞) b의 모든 요소를 ​​인쇄합니다.

$ printf '%s ' "${b[@]#*.}"
302279 302329 302829 302829 303206 303130 303175 303398 303315 303420 303485 303479 303513 303518 302973 303185 303349 303398 303518 303518 303503 303519 303519 303130 303521 303521 303521 303185 303185 303185 303185 303185 303185 303185 303185 303185 303185 303523 303185 303185 303175 303185 303523 303522 303185 303185 303420 303185 303185 303185 303526 303185 303185 303185 303185 303185 303527 303525 303525 303479 303315 303315 303315 303315 303315

그리고 이를 다른 변수 c에 할당합니다(bash와 마찬가지로 printf -v를 사용합니다).

$ printf -v c '%s ' "${b[@]#*.}"

그게 전부입니다. $c에는 목록(공백으로 구분)이 포함됩니다.

답변4

문자열이 단일 변수에 있고 $a제거하려는 접두사 문자열이 "3104.", (OP에 있습니다) 그러면 이건bash 패턴 교체일하다:

b="${a//3104.}" ; echo $b

관련 정보