sed를 사용하여 파일에서 (*)로 시작하는 목록을 바꾸는 방법

sed를 사용하여 파일에서 (*)로 시작하는 목록을 바꾸는 방법

sed별표로 시작하는 줄을 어떻게 바꾸고 1부터 시작하는 숫자로 바꾸나요 ?

목록 시작 부분의 (*)를 숫자로 바꾸려면 sed를 사용해야 합니다.>

파일에 목록이 포함되어 있습니다.

*linux

*computers

*labs

*questions

>>>>로 이동

파일에 목록이 포함되어 있습니다.

1 linux
2 computers
3 labs
4 questions

나는 사용하려고

sed -e 's/*//' file.in > file.out | sed -i = file.out

답변1

awk를 사용할 수 있습니다.

awk '/^\*/ {sub(/\*/, ++i)} 1' <<END
A list
* one
* two
Blah
* three
END
A list
1 one
2 two
Blah
3 three

답변2

몇 가지 트릭을 사용할 수 있습니다. 수직선을 먼저 사용한 *다음 원하는 *경우 제거하십시오.spaces

nl -bp^[*] file | sed 's/^\s*\|\s*\*//g'

답변3

{   tr -s \\n |
    sed =|
    sed '$!N;s/\n./ /'
} <<\INPUT
*linux

*computers

*labs

*questions
INPUT

산출

1 linux
2 computers
3 labs
4 questions

nl가장 명확하지만 sed행 수를 계산할 수 있습니다. sed이 일에는 혼자가 아닙니다.

sh <<HD
$(sed -n 's/^\*\(.*\)/echo "$LINENO \1"/p' <infile)
HD

...또는...

sed -n "s/..*/OUT='&'/p" <infile | 
PS1='${LINENO#0} ${OUT#?}${IFS#??}' dash -i

...둘 다 이전과 동일하게 인쇄됩니다.(조금 어리석긴 하지만). 기본적으로 유사한 터미널 리더를 dash활성화하지 않기 때문에 여기서는 이를 명시적으로 사용하고 있습니다 . 그것이 당신의 readline것이라면 그냥 사용할 수 있지만 링크된 경우 터미널에도 내용이 인쇄 되지 않도록 두 번째 예를 사용해야 합니다 .dashshshbashsh--noeditingOUT=...

실제로 간단한 예제의 경우 다음을 사용하여 모든 작업을 nl수행 할 수 있습니다 tr.

tr -d \* <<\INPUT| nl -s ' ' -w1 -nln
*linux

*computers

*labs

*questions
INPUT

산출

1 linux

2 computers

3 labs

4 questions

답변4

나는 사용 전용 솔루션을 생각해 낼 수 없었지만 sed거의 비슷합니다. , 쉘 sed내장 cmpmv. 약간의 노력과 최신 셸을 사용하면 이를 재정의하여 cmp또는 를 사용하지 않고도 파일 내용을 셸 변수에 저장할 수 있습니다 mv.

#!/bin/sh
if test $# -ne 1
then
    echo usage: $0 file
    exit 1
fi
num=1    # start numbering at 1
infile="$1"
outfile="$1.out"
mv "$infile" "$outfile"    # set up so initial cmp always fails
while ! cmp -s "$infile" "$outfile" # repeat the sed until no more ^* can be found
do
    mv "$outfile" "$infile"
    # replace the first occurrence of ^* with a number and a space
    sed '0,/^\*/s//'$num' /' "$infile" > "$outfile" 
    num=$(expr $num + 1)
done
rm "$outfile"

시험:

$ cat i
first line
*second
*third
fourth
*fifth
$ ./change i
$ cat i
first line
1 second
2 third
fourth
3 fifth

관련 정보