Sed Palitan ang Newline ng Space

Sed Palitan Ang Newline Ng Space



Sa UNIX/Linux, ang sed command ay isang nakalaang tool para sa pag-edit ng mga stream. Maaari itong magsagawa ng iba't ibang mga operasyon sa isang stream ng teksto, tulad ng paghahanap, paghahanap at pagpapalit, at pagpasok/pagtanggal. Sa karamihan, gayunpaman, ang sed ay ginagamit upang hanapin at palitan ang mga nilalaman ng teksto.

Sa gabay na ito, ipapakita namin ang pagpapalit ng mga bagong linya ng espasyo gamit ang sed.

Paggamit ng sed para sa Pagpapalit ng Teksto

Una, tingnan natin ang pagsasagawa ng pangunahing paghahanap at pagpapalit gamit ang sed. Gagamitin ang parehong paraan kapag pinapalitan ang mga bagong linya ng mga puwang na may ilang karagdagang opsyon. Ang istraktura ng command ay ang mga sumusunod:







$ sed -e 's///'

Tingnan ang sumusunod na utos:



$ echo 'ang mabilis na brown fox' | sed -e 's/mabilis/mabilis/g'



Ang echo command ay nagpi-print ng string sa STDOUT . Ang STDOUT stream ay pagkatapos piped kay sed. Inutusan namin si sed na palitan ang anumang instance ng mabilis na palitan ng mabilis. Sa wakas, ang output ay naka-print sa screen.





Pinapalitan ang mga Bagong Linya ng Space

Para sa pagpapakita, ginawa ko ang sumusunod na text file test.txt na may ilang dummy na nilalaman:

$ cat test.txt



Ang sed command ay tumatanggap ng mga regular na expression para sa paglalarawan ng iba't ibang pattern. Gamit ang feature na ito, ilalarawan namin ang newline bilang \n. Subukan nating palitan ng whitespace ang mga bagong linya:

$ sed -e 's/\n/ /g' test.txt

Gayunpaman, hindi iyon gumana gaya ng inaasahan. Upang makamit ang layuning ito, kailangan namin ng ilang karagdagang mga opsyon. Tingnan ang sumusunod na utos:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

Ang sed command ay may maraming mga seksyon; ang bawat isa ay nagpapahiwatig ng isang tiyak na gawain:

  • :a: Lumilikha ng label na 'a'
  • N: Idinaragdag ang susunod na linya sa espasyo ng pattern
  • $!ba: Kung hindi ang huling linya, babalik sa label na 'a'
  • s/\n/ /g: Hinahanap at pinapalitan ang newline (\n) ng espasyo (/ /). Ang pattern ay tumutugma sa buong mundo (/g)

Ang sed command ay umiikot sa mga hakbang hanggang sa maabot nito ang huling linya, pinapalitan ang lahat ng \n character ng espasyo.

Sa halip na ang kumplikadong utos na ito, maaari nating pasimplehin ang mga bagay sa pamamagitan ng paggamit ng -z flag na tumutukoy sa sed upang gumana sa mga walang hiwalay na talaan. Magiging ganito ang utos:

$ sed -z -e 's/\n/ /g' test.txt

Mga Alternatibong Pamamaraan

Bagama't magagawa ni sed nang maayos ang gawain, may ilang mga alternatibong tool. Sa seksyong ito, susuriin natin sandali ang ilan sa mga ito.

Para sa sumusunod na halimbawa, maaari naming gamitin ang tr command upang palitan ang newline ng whitespace sa simpleng paraan:

$ tr '\n' ' ' < test.txt

Magagamit din natin ang perl para gawin ang trabaho. Ang sumusunod na syntax ay katulad din ng ginamit namin sa sed (ngunit pinasimple):

$ perl -p -e 's/\n/ /' test.txt

Ang isa pang paraan upang palitan ang mga bagong linya ng whitespace ay ang paggamit ng paste na command. Tandaan na maaari lamang nitong alisin ang isang character:

$ paste -s -d ' ' test.txt

Katulad ng sed, ang Linux ay may isa pang tool awk. Katulad ng sed, maaari rin itong magsagawa ng ilang advanced na pagpapalit sa input. Para sa aming layunin, gamitin ang sumusunod na awk command:

$ awk 1 ORS=' ' test.txt

Konklusyon

Ginalugad ng gabay na ito kung paano natin mapapalitan ang newline ng espasyo gamit ang sed. Nakamit ito sa dalawang magkaibang paraan. Kasama rin sa gabay na ito ang iba pang nauugnay na tool na magagamit namin upang palitan ng whitespace ang newline.

Sa halip na gumamit ng mga kumplikadong command na mahirap isaulo, ginagamit namin ang Bash scripting para magsagawa ng maraming bagay sa Linux. Bagama't may halaga ito sa ilang pagganap, sulit ang kakayahang umangkop at kakayahang magamit. Matuto ng mas marami tungkol sa Bash scripting para sa mga nagsisimula .