나는 그것을 사용하고 있지만 zsh
해결책이 열려 있습니다. bash
다음 명령이 있다고 가정해 보겠습니다.
ls **/*/assessment(.) | xargs egrep "(^ \[\./.*\]$|^ input = .*$)"
그러면 다음과 유사한 출력이 제공됩니다.
<path-01-to>/assessment: [./input_file_01]
<path-01-to>/assessment: input = 'input_file_01.i'
<path-02-to>/assessment: [./input_file_02]
<path-02-to>/assessment: input = 'input_file_02.i'
<path-02-to>/assessment: [./input_file_02b]
<path-02-to>/assessment: input = 'input_file_02b.i'
<path-03-to>/assessment: [./input_file_03]
<path-03-to>/assessment: input = 'input_file_03.i'
[./title]
input
각 쌍( )이 같은 행에 있도록 행을 축소하고 싶습니다 . 따라서 예상되는 출력은 다음과 같습니다.
<path-01-to>/assessment: [./input_file_01] input = 'input_file_01.i'
<path-02-to>/assessment: [./input_file_02] input = 'input_file_02.i'
<path-02-to>/assessment: [./input_file_02b] input = 'input_file_02b.i'
<path-03-to>/assessment: [./input_file_03] input = 'input_file_03.i'
나는 using을 보았지만 tr -d "\n"
모든 것을 한 줄로 결합합니다. awk
아마도 다른 언어가 이것에 더 적합할 것이라고 생각합니다 .
편집하다:
다음은 입력 파일의 예입니다 assessment
.
경로/01/대상/평가:
[Tests]
[./input_file_01]
type = RunApp
input = 'input_file_01.i'
[../]
[]
경로/02/대상/평가:
[Tests]
[./input_file_02]
type = RunApp
input = 'input_file_02.i'
cli_args = 'blah blah'
[../]
[./input_file_02b]
type = CSVDiff
input = 'input_file_02b.i'
[../]
[]
답변1
이는 awk를 사용하는 모든 UNIX 시스템의 모든 쉘에서 작동합니다.
$ awk '/^ *\[\.\//{title=$1} /^ *input =/{print FILENAME ":", title, "=", $NF}' */*/assessment
01/to/assessment: [./input_file_01] = 'input_file_01.i'
02/to/assessment: [./input_file_02] = 'input_file_02.i'
02/to/assessment: [./input_file_02b] = 'input_file_02b.i'