다음과 같은 일부 파일의 줄이 있습니다.
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
여기에서 512^3
, 16^3
, 4개의 숫자를 추출하여 다른 용도로 각각 4개의 변수 , , 및 에 할당하고 싶습니다 .32^3
800
level
grid
boxes
tasks
어떻게 해야 하나요?
답변1
Bash는 정규식을 =~
in 연산자 와 일치시킬 수 있습니다 [[ ... ]]
.
#! /bin/bash
line='attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...'
num='([0-9^]+)'
nonum='[^0-9^]+'
if [[ $line =~ $num$nonum$num$nonum$num$nonum$num ]] ; then
level=${BASH_REMATCH[1]}
grid=${BASH_REMATCH[2]}
boxes=${BASH_REMATCH[3]}
tasks=${BASH_REMATCH[4]}
echo "Level $level, grid $grid, boxes $boxes, tasks $tasks."
fi
답변2
awk를 사용하세요:
awk '{print "level="$5"\n""grid="$12"\n""boxes="$15"\n""tasks="$18}' file
level=512^3
grid=16^3
boxes=32^3
tasks=800
답변3
이것이 귀하가 작성한 프로그램/스크립트의 출력이고 텍스트가 공식적인 경우(즉, 이 패턴을 정확히 따르는 경우) 를 사용할 수 있습니다 cut
.
#!/bin/bash
$STRING='attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...'
level=$(echo $STRING | cut -d' ' -f5 -)
grid=$(echo $STRING | cut -d' ' -f12 -)
boxes=$(echo $STRING | cut -d' ' -f15 -)
tasks=$(echo $STRING | cut -d' ' -f18 -)