PDA

Դիտել ողջ տարբերակը : Linux, Bash script



CactuSoul
14.09.2007, 13:40
Ժող, ես նոր-նոր եմ փորձում մի բան սովորել էս ասպարեզում, էնպես որ եթե տարրական բաների մասին հարցնեմ, վրաս ծիծաղելու փոխարեն կօգնեք, չէ՞;):

Հիմա ինձ պետք է մի script գրել, որը command line-ից ստացած file-ում գտնում է, թե ստացած երկրորդ արգումենտը որտեղ է հանդիպում առաջին անգամ ու ջնջում դրանից առաջ եղած-չեղածը: Inet-ում փորձեցի ինչ-որ բան գտնեմ դրա հետ կապված, բայց գտածս լավագույն տարբերակը ջնջում է առաջին տողն ու փնտրվող string-ը պարունակող առաջին հանդիպած տողը նարառյալ, իսկ ինձ պետք է, որ չներառի (հուսով եմ՝ ստացվեց բացատրել:oy):

Էդ գտածս ձևը սա էր.
Ունեմ test_file.txt անունով մի file, որի վրա պիտի կատարվեն փոփոխությունները: Պարունակությունը հետևյալն է.



Line to be deleted. :)


bla
bla
bla
(((
:) :) :)

*

This line and those above will be removed.
0x0000
0x7fff
This line MUST stay. :)
0x8001
0x6dd1
And this one, too.
0x7d4b
The search-string is in the middle of line: 0x132b. The rest should stay.
0x2faa
0x48c8


Bash script-ը ունի այս տեսքը.

#!/bin/bash

###########################################
#### Delete all the lines in file up to the first met "0x". ####
###########################################

sed -i '1,/'"$2"'/d' test_file.txt



Հրամանը՝

./bash_script_example_2 test_file.txt 0x

Արդյունքը.
test_file.txt-ի պարունակությունը դառնում է այսպիսին.

0x7fff
This line MUST stay. :)
0x8001
0x6dd1
And this one, too.
0x7d4b
The search-string is in the middle of line: 0x132b. The rest should stay.
0x2faa
0x48c8


Ցանկալի արդյունքը.
test_file.txt-ը պիտի պարունակեր նաև "0x0000" տողը.

0x0000
0x7fff
This line MUST stay. :)
0x8001
0x6dd1
And this one, too.
0x7d4b
The search-string is in the middle of line: 0x132b. The rest should stay.
0x2faa
0x48c8

Խնդրում եմ, օգնեք, եթե կարող եք, ու ինչքան հնարավոր է շտապ:oy…

Ավելացվել է 6 րոպե անց
Հա, ու մեկ էլ.
բա որ հանկարծ էդ փնտրվող string-ը առաջին անգամ հանդիպի որևէ տողի ոչ թե սկզբում, այլ մեջը՝ ինչ-որ տեղ: Էդ դեպքում ինձ պետք ա էդ տողի՝ դրանից առաջ եղած մասը ջնջել, իսկ մնացածը թողնել: :think