Linux లో sed కమాండ్ ఎలా ఉపయోగించాలి
ఇది వెర్రి అనిపించవచ్చు, కానీ Linux sed
కమాండ్ ఇంటర్ఫేస్ లేని టెక్స్ట్ ఎడిటర్. ఫైల్లు మరియు స్ట్రీమ్లలో వచనాన్ని మార్చటానికి మీరు దీన్ని కమాండ్ లైన్ నుండి ఉపయోగించవచ్చు. దాని శక్తిని ఎలా ఉపయోగించాలో మేము మీకు చూపుతాము.
ది పవర్ ఆఫ్ సెడ్
ది sed
ఆదేశం కొంచెం చదరంగం లాంటిది: ప్రాథమికాలను నేర్చుకోవడానికి ఒక గంట సమయం పడుతుంది మరియు వాటిని నేర్చుకోవటానికి జీవితకాలం (లేదా, కనీసం చాలా అభ్యాసం). యొక్క ప్రతి ప్రధాన వర్గాలలో ప్రారంభ గాంబిట్ల ఎంపికను మేము మీకు చూపుతాము sed
కార్యాచరణ.
sed
పైప్డ్ ఇన్పుట్ లేదా టెక్స్ట్ ఫైళ్ళపై పనిచేసే స్ట్రీమ్ ఎడిటర్. అయితే దీనికి ఇంటరాక్టివ్ టెక్స్ట్ ఎడిటర్ ఇంటర్ఫేస్ లేదు. బదులుగా, ఇది టెక్స్ట్ ద్వారా పనిచేసేటప్పుడు దానిని అనుసరించడానికి మీరు సూచనలను అందిస్తారు. ఇవన్నీ బాష్ మరియు ఇతర కమాండ్-లైన్ షెల్స్లో పనిచేస్తాయి.
తో sed
మీరు ఈ క్రిందివన్నీ చేయవచ్చు:
- వచనాన్ని ఎంచుకోండి
- వచనాన్ని ప్రత్యామ్నాయం చేయండి
- వచనానికి పంక్తులను జోడించండి
- టెక్స్ట్ నుండి పంక్తులను తొలగించండి
- అసలు ఫైల్ను సవరించండి (లేదా సంరక్షించండి)
భావనలను పరిచయం చేయడానికి మరియు ప్రదర్శించడానికి మేము మా ఉదాహరణలను రూపొందించాము, కఠినమైన (మరియు కనీసం చేరుకోగల) sed
ఆదేశాలు. అయితే, యొక్క నమూనా సరిపోలిక మరియు వచన ఎంపిక కార్యాచరణలు sed
సాధారణ వ్యక్తీకరణలపై (రిజెక్స్) ఎక్కువగా ఆధారపడండి. వీటిని ఉత్తమంగా పొందడానికి మీకు కొంత పరిచయం అవసరం sed
.
సంబంధించినది:లైనక్స్లో రెగ్యులర్ ఎక్స్ప్రెషన్స్ (రిజెక్స్) ను ఎలా ఉపయోగించాలి
ఒక సాధారణ ఉదాహరణ
మొదట, మేము ఉపయోగించబోతున్నాము ప్రతిధ్వని
కొంత వచనాన్ని పంపడానికి sed
పైపు ద్వారా, మరియు కలిగి sed
వచనంలో కొంత భాగాన్ని ప్రత్యామ్నాయం చేయండి. అలా చేయడానికి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
ఎకో హౌటోగోంక్ | sed 's / gonk / geek /'
ది ప్రతిధ్వని
ఆదేశం “హౌటోగోంక్” లోకి పంపుతుంది sed
, మరియు మా సాధారణ ప్రత్యామ్నాయ నియమం (“లు” అంటే ప్రత్యామ్నాయం).sed
మొదటి స్ట్రింగ్ సంభవించినందుకు ఇన్పుట్ వచనాన్ని శోధిస్తుంది మరియు ఏదైనా సరిపోలికలను రెండవదానితో భర్తీ చేస్తుంది.
“గోంక్” స్ట్రింగ్ “గీక్” తో భర్తీ చేయబడింది మరియు కొత్త స్ట్రింగ్ టెర్మినల్ విండోలో ముద్రించబడుతుంది.
ప్రత్యామ్నాయాలు బహుశా చాలా సాధారణ ఉపయోగం sed
. మేము ప్రత్యామ్నాయాలలో లోతుగా డైవ్ చేయడానికి ముందు, అయితే, వచనాన్ని ఎలా ఎంచుకోవాలి మరియు సరిపోల్చాలో తెలుసుకోవాలి.
వచనాన్ని ఎంచుకోవడం
మా ఉదాహరణల కోసం మాకు టెక్స్ట్ ఫైల్ అవసరం. మేము శామ్యూల్ టేలర్ కోల్రిడ్జ్ యొక్క పురాణ కవిత “ది రిమ్ ఆఫ్ ది ఏన్షియంట్ మెరైనర్” లోని పద్యాల ఎంపికను ఉపయోగిస్తాము.
దీన్ని పరిశీలించడానికి మేము ఈ క్రింది వాటిని టైప్ చేస్తాము తక్కువ
:
తక్కువ coleridge.txt
ఫైల్ నుండి కొన్ని పంక్తులను ఎంచుకోవడానికి, మేము ఎంచుకోవాలనుకునే పరిధి యొక్క ప్రారంభ మరియు ముగింపు పంక్తులను అందిస్తాము. ఒకే సంఖ్య ఆ పంక్తిని ఎంచుకుంటుంది.
ఒకటి నుండి నాలుగు పంక్తులను సేకరించేందుకు, మేము ఈ ఆదేశాన్ని టైప్ చేస్తాము:
sed -n '1,4p' coleridge.txt
మధ్య కామాను గమనించండి 1
మరియు 4
. ది p
అంటే “సరిపోలిన పంక్తులను ముద్రించండి.” అప్రమేయంగా,sed
అన్ని పంక్తులను ముద్రిస్తుంది. మ్యాచింగ్ పంక్తులతో ఫైల్లోని అన్ని వచనాలను రెండుసార్లు ముద్రించాము. దీన్ని నివారించడానికి, మేము దీనిని ఉపయోగిస్తాము -n
సరిపోలని వచనాన్ని అణచివేయడానికి (నిశ్శబ్ద) ఎంపిక.
మేము పంక్తి సంఖ్యలను మారుస్తాము, తద్వారా క్రింద చూపిన విధంగా వేరే పద్యం ఎంచుకోవచ్చు:
sed -n '6,9p' coleridge.txt
మేము ఉపయోగించవచ్చు -e
(వ్యక్తీకరణ) బహుళ ఎంపికలు చేయడానికి ఎంపిక. రెండు వ్యక్తీకరణలతో, మేము రెండు పద్యాలను ఎంచుకోవచ్చు, ఇలా:
sed -n -e '1,4p' -e '31, 34p 'coleridge.txt
రెండవ వ్యక్తీకరణలో మొదటి సంఖ్యను తగ్గిస్తే, మేము రెండు పద్యాల మధ్య ఖాళీని చేర్చవచ్చు. మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed -n -e '1,4p' -e '30, 34p 'coleridge.txt
మేము కూడా ఒక ప్రారంభ పంక్తిని ఎంచుకొని చెప్పగలం sed
ఫైల్ ద్వారా అడుగు పెట్టడానికి మరియు ప్రత్యామ్నాయ పంక్తులను, ప్రతి ఐదవ పంక్తిని ముద్రించడానికి లేదా ఎన్ని పంక్తులను దాటవేయడానికి. కమాండ్ మేము శ్రేణిని ఎంచుకోవడానికి పైన ఉపయోగించిన వాటికి సమానంగా ఉంటుంది. అయితే, ఈ సమయంలో, మేము టిల్డేని ఉపయోగిస్తాము (~
) సంఖ్యలను వేరు చేయడానికి కామాకు బదులుగా.
మొదటి సంఖ్య ప్రారంభ పంక్తిని సూచిస్తుంది. రెండవ సంఖ్య చెబుతుంది sed
ప్రారంభ పంక్తి తర్వాత ఏ పంక్తులు మనం చూడాలనుకుంటున్నాము. సంఖ్య 2 అంటే ప్రతి రెండవ పంక్తి, 3 అంటే ప్రతి మూడవ పంక్తి, మరియు మొదలైనవి.
మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed -n '1 ~ 2p' coleridge.txt
మీరు వెతుకుతున్న వచనం ఫైల్లో ఎక్కడ ఉందో మీకు ఎప్పటికి తెలియదు, అంటే పంక్తి సంఖ్యలు ఎల్లప్పుడూ పెద్దగా సహాయపడవు. అయితే, మీరు కూడా ఉపయోగించవచ్చు sed
సరిపోలే వచన నమూనాలను కలిగి ఉన్న పంక్తులను ఎంచుకోవడానికి. ఉదాహరణకు, “మరియు” తో ప్రారంభమయ్యే అన్ని పంక్తులను సంగ్రహిద్దాం.
కేరెట్ (^
) పంక్తి ప్రారంభాన్ని సూచిస్తుంది. మేము మా శోధన పదాన్ని ఫార్వర్డ్ స్లాష్లలో పొందుపరుస్తాము (/
). మేము “మరియు” తర్వాత ఖాళీని కూడా చేర్చుతాము, కాబట్టి “Android” వంటి పదాలు ఫలితంలో చేర్చబడవు.
పఠనం sed
స్క్రిప్ట్లు మొదట కొంచెం కఠినంగా ఉంటాయి. ది / పే
మేము పైన ఉపయోగించిన ఆదేశాలలో చేసినట్లే “ప్రింట్” అని అర్థం. కింది ఆదేశంలో, ఫార్వర్డ్ స్లాష్ దీనికి ముందు:
sed -n '/ ^ మరియు / p' coleridge.txt
“మరియు” తో ప్రారంభమయ్యే మూడు పంక్తులు ఫైల్ నుండి సంగ్రహించబడతాయి మరియు మన కోసం ప్రదర్శించబడతాయి.
ప్రత్యామ్నాయాలు చేయడం
మా మొదటి ఉదాహరణలో, a కోసం ఈ క్రింది ప్రాథమిక ఆకృతిని మీకు చూపించాము sed
ప్రత్యామ్నాయం:
ఎకో హౌటోగోంక్ | sed 's / gonk / geek /'
ది s
చెబుతుంది sed
ఇది ప్రత్యామ్నాయం. మొదటి స్ట్రింగ్ శోధన నమూనా, మరియు రెండవది ఆ సరిపోలిన వచనాన్ని భర్తీ చేయాలనుకుంటున్న వచనం. వాస్తవానికి, అన్ని విషయాల మాదిరిగానే లినక్స్, డెవిల్ వివరాలలో ఉంది.
“రోజు” యొక్క అన్ని సంఘటనలను “వారం” గా మార్చడానికి మేము ఈ క్రింది వాటిని టైప్ చేస్తాము మరియు నావికుడు మరియు ఆల్బాట్రాస్ బంధానికి ఎక్కువ సమయం ఇస్తాము:
sed -n 's / day / week / p' coleridge.txt
మొదటి పంక్తిలో, “రోజు” యొక్క రెండవ సంఘటన మాత్రమే మార్చబడుతుంది. ఇది దేని వలన అంటే sed
ప్రతి పంక్తికి మొదటి మ్యాచ్ తర్వాత ఆగుతుంది. గ్లోబల్ సెర్చ్ చేయడానికి, దిగువ చూపిన విధంగా, వ్యక్తీకరణ చివరిలో మనం “g” ను జోడించాలి, కాబట్టి ప్రతి పంక్తిలోని అన్ని మ్యాచ్లు ప్రాసెస్ చేయబడతాయి:
sed -n 's / day / week / gp' coleridge.txt
ఇది మొదటి వరుసలోని నలుగురిలో ముగ్గురికి సరిపోతుంది. ఎందుకంటే మొదటి పదం “డే,” మరియు sed
కేస్-సెన్సిటివ్, ఇది ఆ ఉదాహరణను "రోజు" గా పరిగణించదు.
మేము కింది వాటిని టైప్ చేస్తాము i
కేస్-ఇన్సెన్సిటివిటీని సూచించడానికి వ్యక్తీకరణ చివరిలో ఉన్న ఆదేశానికి:
sed -n 's / day / week / gip' coleridge.txt
ఇది పనిచేస్తుంది, కానీ మీరు ఎల్లప్పుడూ ప్రతిదానికీ కేస్-ఇన్సెన్సిటివిటీని ఆన్ చేయకూడదనుకుంటారు. ఆ సందర్భాలలో, మీరు నమూనా-నిర్దిష్ట కేస్-ఇన్సెన్సిటివిటీని జోడించడానికి రీజెక్స్ సమూహాన్ని ఉపయోగించవచ్చు.
ఉదాహరణకు, మేము చదరపు బ్రాకెట్లలో అక్షరాలను జతచేస్తే ([]
), వాటిని “ఈ అక్షరాల జాబితా నుండి ఏదైనా పాత్ర” అని వ్యాఖ్యానిస్తారు.
మేము కిందివాటిని టైప్ చేసి, సమూహంలో “D” మరియు “d” లను చేర్చుకుంటాము, అది “రోజు” మరియు “రోజు” రెండింటికీ సరిపోతుందని నిర్ధారించుకోండి:
sed -n 's / [Dd] ay / week / gp' coleridge.txt
మేము ఫైల్ యొక్క విభాగాలకు ప్రత్యామ్నాయాలను పరిమితం చేయవచ్చు. మా ఫైల్లో మొదటి పద్యంలో విచిత్రమైన అంతరం ఉందని చెప్పండి. మొదటి పద్యం చూడటానికి మనం ఈ క్రింది సుపరిచితమైన ఆదేశాన్ని ఉపయోగించవచ్చు:
sed -n '1,4p' coleridge.txt
మేము రెండు ఖాళీలను శోధిస్తాము మరియు వాటిని ఒకదానితో ప్రత్యామ్నాయం చేస్తాము. మేము దీన్ని ప్రపంచవ్యాప్తంగా చేస్తాము, కాబట్టి చర్య మొత్తం పంక్తిలో పునరావృతమవుతుంది. స్పష్టంగా చెప్పాలంటే, శోధన నమూనా స్థలం, అంతరిక్ష నక్షత్రం (*
), మరియు ప్రత్యామ్నాయ స్ట్రింగ్ ఒకే స్థలం. ది 1,4
ఫైల్ యొక్క మొదటి నాలుగు పంక్తులకు ప్రత్యామ్నాయాన్ని పరిమితం చేస్తుంది.
మేము ఈ క్రింది ఆదేశంలో అన్నింటినీ కలిపి ఉంచాము:
sed -n '1,4 s / * / / gp' coleridge.txt
ఇది చక్కగా పనిచేస్తుంది! శోధన నమూనా ఇక్కడ ముఖ్యమైనది. నక్షత్రం (*
) మునుపటి అక్షరం యొక్క సున్నా లేదా అంతకంటే ఎక్కువని సూచిస్తుంది, ఇది ఖాళీ. అందువల్ల, శోధన నమూనా ఒక స్థలం లేదా అంతకంటే ఎక్కువ తీగలను వెతుకుతోంది.
బహుళ ఖాళీల యొక్క ఏదైనా క్రమం కోసం మేము ఒకే స్థలాన్ని ప్రత్యామ్నాయం చేస్తే, ప్రతి పదానికి మధ్య ఒకే స్థలంతో ఫైల్ను సాధారణ అంతరానికి తిరిగి ఇస్తాము. ఇది కొన్ని సందర్భాల్లో ఒకే స్థలం కోసం ఒకే స్థలాన్ని ప్రత్యామ్నాయం చేస్తుంది, కానీ ఇది దేనినీ ప్రతికూలంగా ప్రభావితం చేయదు - మేము ఇంకా ఆశించిన ఫలితాన్ని పొందుతాము.
మేము ఈ క్రింది వాటిని టైప్ చేసి, శోధన నమూనాను ఒకే స్థలానికి తగ్గిస్తే, మేము రెండు ఖాళీలను ఎందుకు చేర్చాలో మీరు వెంటనే చూస్తారు:
sed -n '1,4 s / * / / gp' coleridge.txt
ఆస్టరిస్క్ మునుపటి అక్షరంతో సున్నా లేదా అంతకంటే ఎక్కువ సరిపోలినందున, ఇది ఖాళీ లేని ప్రతి అక్షరాన్ని “సున్నా స్థలం” గా చూస్తుంది మరియు దానికి ప్రత్యామ్నాయాన్ని వర్తింపజేస్తుంది.
అయితే, మేము శోధన నమూనాలో రెండు ఖాళీలను చేర్చినట్లయితే,sed
ప్రత్యామ్నాయాన్ని వర్తించే ముందు కనీసం ఒక స్పేస్ అక్షరాన్ని కనుగొనాలి. ఇది నాన్స్పేస్ అక్షరాలు తాకబడకుండా చూస్తుంది.
మేము ఈ క్రింది వాటిని టైప్ చేస్తాము -e
(వ్యక్తీకరణ) మేము ఇంతకుముందు ఉపయోగించాము, ఇది ఒకేసారి రెండు లేదా అంతకంటే ఎక్కువ ప్రత్యామ్నాయాలను చేయడానికి అనుమతిస్తుంది:
sed -n -e 's / motion / flutter / gip' -e 's / sea / gutter / gip' coleridge.txt
మేము సెమికోలన్ ఉపయోగిస్తే అదే ఫలితాన్ని సాధించవచ్చు (;
) రెండు వ్యక్తీకరణలను వేరు చేయడానికి, ఇలా:
sed -n 's / motion / flutter / gip; s /cean / gutter / gip' coleridge.txt
మేము ఈ క్రింది ఆదేశంలో “వారం” కోసం “రోజు” మార్చుకున్నప్పుడు, “బాగా ఒక రోజు” అనే వ్యక్తీకరణలోని “రోజు” యొక్క ఉదాహరణ కూడా ఇచ్చిపుచ్చుకుంది:
sed -n 's / [Dd] ay / week / gp' coleridge.txt
దీన్ని నివారించడానికి, మేము మరొక నమూనాతో సరిపోయే పంక్తులలో మాత్రమే ప్రత్యామ్నాయాలను ప్రయత్నించవచ్చు. ప్రారంభంలో శోధన నమూనాను కలిగి ఉండటానికి మేము ఆదేశాన్ని సవరించినట్లయితే, మేము ఆ నమూనాతో సరిపోయే పంక్తులలో పనిచేయడాన్ని మాత్రమే పరిశీలిస్తాము.
మా సరిపోలిక నమూనాను “తరువాత” అనే పదాన్ని చేయడానికి మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed -n '/ after / s / [Dd] ay / week / gp' coleridge.txt
అది మనకు కావలసిన ప్రతిస్పందనను ఇస్తుంది.
మరిన్ని కాంప్లెక్స్ ప్రత్యామ్నాయాలు
కోల్రిడ్జ్కు విరామం ఇచ్చి వాడండి sed
నుండి పేర్లను సేకరించేందుకు etc / passwd
ఫైల్.
దీన్ని చేయడానికి తక్కువ మార్గాలు ఉన్నాయి (తరువాత మరింత), కానీ మరొక భావనను ప్రదర్శించడానికి మేము ఇక్కడ ఎక్కువ మార్గాన్ని ఉపయోగిస్తాము. శోధన నమూనాలో సరిపోలిన ప్రతి వస్తువును (సబ్ ఎక్స్ప్రెషన్స్ అని పిలుస్తారు) లెక్కించవచ్చు (గరిష్టంగా తొమ్మిది అంశాలు వరకు). అప్పుడు మీరు ఈ సంఖ్యలను మీలో ఉపయోగించవచ్చుsed
నిర్దిష్ట ఉపవిభాగాలను సూచించడానికి ఆదేశాలు.
మీరు కుండలీకరణాల్లో సబ్ ఎక్స్ప్రెషన్ను జతచేయాలి [()
] ఇది పనిచేయడానికి. కుండలీకరణాలు కూడా వెనుకబడిన స్లాష్తో ముందే ఉండాలి (\
) వాటిని సాధారణ పాత్రగా పరిగణించకుండా నిరోధించడానికి.
దీన్ని చేయడానికి, మీరు ఈ క్రింది వాటిని టైప్ చేస్తారు:
sed 's / \ ([^:] * \). * / \ 1 /' / etc / passwd
దీన్ని విచ్ఛిన్నం చేద్దాం:
sed 's /
: దిsed
ఆదేశం మరియు ప్రత్యామ్నాయ వ్యక్తీకరణ ప్రారంభం.\(
: ప్రారంభ కుండలీకరణాలు [(
] ఉపవిభాగాన్ని చుట్టుముట్టడం, ముందు బ్యాక్స్లాష్ (\
).[^:]*
: శోధన పదం యొక్క మొదటి ఉపప్రభాగం చదరపు బ్రాకెట్లలో ఒక సమూహాన్ని కలిగి ఉంటుంది. కేరెట్ (^
) అంటే సమూహంలో ఉపయోగించినప్పుడు “కాదు”. సమూహం అంటే పెద్దప్రేగు లేని ఏదైనా పాత్ర (:
) మ్యాచ్గా అంగీకరించబడుతుంది.\)
: ముగింపు కుండలీకరణాలు [)
] మునుపటి బ్యాక్స్లాష్తో (\
)..*
: ఈ రెండవ శోధన ఉపప్రసరణ అంటే “ఏదైనా పాత్ర మరియు వాటిలో ఎన్ని సంఖ్యలు”./\1
: వ్యక్తీకరణ యొక్క ప్రత్యామ్నాయ భాగం కలిగి ఉంది1
బాక్ స్లాష్ ముందు (\
). ఇది మొదటి ఉప-వ్యక్తీకరణకు సరిపోయే వచనాన్ని సూచిస్తుంది./'
: ముగింపు ఫార్వర్డ్-స్లాష్ (/
) మరియు ఒకే కోట్ ('
) ముగించండిsed
ఆదేశం.
ఇవన్నీ అర్థం ఏమిటంటే, పెద్దప్రేగు లేని అక్షరాల యొక్క ఏదైనా స్ట్రింగ్ కోసం మేము వెతుకుతున్నాము (:
), ఇది సరిపోయే వచనానికి మొదటి ఉదాహరణ అవుతుంది. అప్పుడు, మేము ఆ పంక్తిలో మరేదైనా వెతుకుతున్నాము, ఇది వచనానికి సరిపోయే రెండవ ఉదాహరణ అవుతుంది. మేము మొత్తం పంక్తిని మొదటి ఉప-వ్యక్తీకరణతో సరిపోయే వచనంతో భర్తీ చేయబోతున్నాము.
లోని ప్రతి పంక్తి / etc / passwd
ఫైల్ పెద్దప్రేగు-ముగిసిన వినియోగదారు పేరుతో మొదలవుతుంది. మేము మొదటి పెద్దప్రేగు వరకు అన్నింటినీ సరిపోల్చాము, ఆపై ఆ విలువను మొత్తం పంక్తికి ప్రత్యామ్నాయం చేస్తాము. కాబట్టి, మేము వినియోగదారు పేర్లను వేరుచేసాము.
తరువాత, మేము కుండలీకరణాల్లో రెండవ ఉపవిభాగాన్ని పొందుపరుస్తాము [()
] కాబట్టి మనం దానిని సంఖ్య ద్వారా కూడా సూచించవచ్చు. మేము కూడా భర్తీ చేస్తాము \1
తో \2
. మా ఆదేశం ఇప్పుడు మొదటి పెద్దప్రేగు నుండి ప్రతిదానితో మొత్తం పంక్తిని ప్రత్యామ్నాయం చేస్తుంది (:
) రేఖ చివరి వరకు.
మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed 's / \ ([^:] * \) \ (. * \) / \ 2 /' / etc / passwd
ఆ చిన్న మార్పులు కమాండ్ యొక్క అర్ధాన్ని విలోమం చేస్తాయి మరియు వినియోగదారు పేర్లు తప్ప మిగతావన్నీ మనకు లభిస్తాయి.
ఇప్పుడు, దీన్ని చేయడానికి శీఘ్రంగా మరియు సులభమైన మార్గాన్ని పరిశీలిద్దాం.
మా శోధన పదం మొదటి పెద్దప్రేగు నుండి (:
) రేఖ చివరి వరకు. ఎందుకంటే మా ప్రత్యామ్నాయ వ్యక్తీకరణ ఖాళీగా ఉంది (//
), సరిపోలిన వచనాన్ని మేము దేనితోనూ భర్తీ చేయము.
కాబట్టి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము, మొదటి పెద్దప్రేగు నుండి ప్రతిదీ కత్తిరించుకుంటాము (:
) పంక్తి చివర, వినియోగదారు పేర్లను వదిలివేస్తుంది:
sed 's /:.*// "/ etc / passwd
ఒకే ఆదేశంలో మొదటి మరియు రెండవ మ్యాచ్లను సూచించే ఉదాహరణను చూద్దాం.
మాకు కామాలతో కూడిన ఫైల్ వచ్చింది (,
) మొదటి మరియు చివరి పేర్లను వేరుచేస్తుంది. మేము వాటిని "చివరి పేరు, మొదటి పేరు" గా జాబితా చేయాలనుకుంటున్నాము. మేము ఉపయోగించవచ్చుపిల్లి
, క్రింద చూపిన విధంగా, ఫైల్లో ఏముందో చూడటానికి:
cat geeks.txt
చాలా ఇష్టం sed
ఆదేశాలు, ఈ తదుపరిది మొదట అభేద్యంగా అనిపించవచ్చు:
sed 's / ^ \ (. * \), \ (. * \) $ / \ 2, \ 1 / g' geeks.txt
ఇది మేము ఉపయోగించిన ఇతరుల మాదిరిగానే ప్రత్యామ్నాయ ఆదేశం, మరియు శోధన నమూనా చాలా సులభం. మేము దీన్ని క్రింద విచ్ఛిన్నం చేస్తాము:
sed 's /
: సాధారణ ప్రత్యామ్నాయ ఆదేశం.^
: కేరెట్ సమూహంలో లేనందున ([]
), దీని అర్థం “లైన్ ప్రారంభం”.\(.*\),
: మొదటి ఉప-వ్యక్తీకరణ ఏదైనా అక్షరాల సంఖ్య. ఇది కుండలీకరణాల్లో ఉంది [()
], వీటిలో ప్రతి ఒక్కటి బ్యాక్స్లాష్కు ముందు ఉంటుంది (\
) కాబట్టి మేము దానిని సంఖ్య ద్వారా సూచించవచ్చు. మా మొత్తం శోధన నమూనా ఇప్పటివరకు లైన్ ప్రారంభం నుండి మొదటి కామా వరకు శోధనగా అనువదిస్తుంది (,
) ఎన్ని అక్షరాలకైనా.\(.*\)
: తదుపరి ఉపప్రసరణ (మళ్ళీ) ఏదైనా అక్షరం యొక్క సంఖ్య. ఇది కుండలీకరణాల్లో కూడా ఉంది [()
], ఈ రెండూ బ్యాక్స్లాష్కు ముందు ఉంటాయి (\
) కాబట్టి మేము సరిపోలే వచనాన్ని సంఖ్య ద్వారా సూచించవచ్చు.$/
: డాలర్ గుర్తు ($
) పంక్తి చివరను సూచిస్తుంది మరియు మా శోధన రేఖ చివరి వరకు కొనసాగడానికి అనుమతిస్తుంది. డాలర్ గుర్తును పరిచయం చేయడానికి మేము దీనిని ఉపయోగించాము. నక్షత్రం వలె మాకు ఇక్కడ నిజంగా అవసరం లేదు (*
) ఈ దృష్టాంతంలో లైన్ చివరికి వెళ్తుంది. ఫార్వర్డ్ స్లాష్ (/
) శోధన నమూనా విభాగాన్ని పూర్తి చేస్తుంది.\ 2, \ 1 / గ్రా '
: మేము కుండలీకరణాల్లో మా రెండు ఉపవిభాగాలను జతచేసినందున, వాటి సంఖ్యల ద్వారా మేము రెండింటినీ సూచించవచ్చు. మేము ఆర్డర్ను రివర్స్ చేయాలనుకుంటున్నాము కాబట్టి, మేము వాటిని టైప్ చేస్తామురెండవ మ్యాచ్, మొదటి మ్యాచ్
. సంఖ్యలు బ్యాక్స్లాష్కు ముందు ఉండాలి (\
)./ గ్రా
: ఇది ప్రతి పంక్తిలో ప్రపంచవ్యాప్తంగా పనిచేయడానికి మా ఆదేశాన్ని అనుమతిస్తుంది.geeks.txt
: మేము పనిచేస్తున్న ఫైల్.
మీరు కట్ ఆదేశాన్ని కూడా ఉపయోగించవచ్చు (సి
) మీ శోధన నమూనాతో సరిపోయే మొత్తం పంక్తులను ప్రత్యామ్నాయం చేయడానికి. “మెడ” అనే పదంతో ఒక పంక్తిని శోధించడానికి మేము ఈ క్రింది వాటిని టైప్ చేసి, దానిని క్రొత్త టెక్స్ట్ స్ట్రింగ్తో భర్తీ చేస్తాము:
sed '/ neck / c నా మణికట్టు చుట్టూ' coleridge.txt
మా క్రొత్త పంక్తి ఇప్పుడు మా సారం దిగువన కనిపిస్తుంది.
లైన్స్ మరియు టెక్స్ట్ చొప్పించడం
మన ఫైల్లో కొత్త పంక్తులు మరియు వచనాన్ని కూడా చేర్చవచ్చు. సరిపోలే వాటి తర్వాత కొత్త పంక్తులను చొప్పించడానికి, మేము అనుబంధం ఆదేశాన్ని ఉపయోగిస్తాము (a
).
మేము పని చేయబోయే ఫైల్ ఇక్కడ ఉంది:
cat geeks.txt
దీన్ని అనుసరించడం కొంచెం సులభతరం చేయడానికి మేము పంక్తులను లెక్కించాము.
“అతడు” అనే పదాన్ని కలిగి ఉన్న పంక్తుల కోసం శోధించడానికి మేము ఈ క్రింది వాటిని టైప్ చేస్తాము మరియు వాటి క్రింద కొత్త పంక్తిని చొప్పించండి:
sed '/ He / a -> చొప్పించబడింది!' geeks.txt
మేము ఈ క్రింది వాటిని టైప్ చేసి, ఇన్సర్ట్ కమాండ్ (i
) సరిపోయే వచనాన్ని కలిగి ఉన్న వాటికి పైన కొత్త పంక్తిని చొప్పించడానికి:
sed '/ He / i -> చొప్పించబడింది!' geeks.txt
మేము ఆంపర్సండ్ ఉపయోగించవచ్చు (&
), ఇది సరిపోలిన పంక్తికి క్రొత్త వచనాన్ని జోడించడానికి అసలు సరిపోలిన వచనాన్ని సూచిస్తుంది. \1
, \2
, మరియు మొదలైనవి, సరిపోలే ఉపవిభాగాలను సూచిస్తాయి.
పంక్తి ప్రారంభానికి వచనాన్ని జోడించడానికి, మా క్రొత్త వచనాన్ని అసలు పంక్తితో మిళితం చేసే పున ment స్థాపన నిబంధనతో కలిపి, పంక్తిలోని ప్రతిదానికీ సరిపోయే ప్రత్యామ్నాయ ఆదేశాన్ని ఉపయోగిస్తాము.
ఇవన్నీ చేయడానికి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed 's /.*/--> చేర్చబడింది & /' geeks.txt
మేము కింది వాటిని టైప్ చేస్తాము జి
ఆదేశం, ఇది ప్రతి పంక్తి మధ్య ఖాళీ గీతను జోడిస్తుంది:
sed 'G' geeks.txt
మీరు రెండు లేదా అంతకంటే ఎక్కువ ఖాళీ పంక్తులను జోడించాలనుకుంటే, మీరు ఉపయోగించవచ్చు జి; జి
, జి; జి; జి
, మరియు మొదలైనవి.
పంక్తులను తొలగిస్తోంది
తొలగించు ఆదేశం (d
) శోధన నమూనాతో సరిపోయే పంక్తులను లేదా పంక్తి సంఖ్యలు లేదా పరిధులతో పేర్కొన్న వాటిని తొలగిస్తుంది.
ఉదాహరణకు, మూడవ పంక్తిని తొలగించడానికి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed '3d' geeks.txt
నాలుగైదు పంక్తుల పరిధిని తొలగించడానికి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed '4,5d' geeks.txt
పరిధికి వెలుపల పంక్తులను తొలగించడానికి, మేము ఆశ్చర్యార్థక బిందువును ఉపయోగిస్తాము (!
), క్రింద చూపిన విధంగా:
sed '6,7! d' geeks.txt
మీ మార్పులను సేవ్ చేస్తోంది
ఇప్పటివరకు, మా ఫలితాలన్నీ టెర్మినల్ విండోకు ముద్రించబడ్డాయి, కాని మేము వాటిని ఇంకా ఎక్కడా సేవ్ చేయలేదు. వీటిని శాశ్వతంగా చేయడానికి, మీరు మీ మార్పులను అసలు ఫైల్కు వ్రాయవచ్చు లేదా వాటిని క్రొత్తదానికి మళ్ళించవచ్చు.
మీ అసలు ఫైల్ను ఓవర్రైట్ చేయడానికి కొంత జాగ్రత్త అవసరం. మీ ఉంటే sed
ఆదేశం తప్పు, అన్డు చేయడం కష్టం అయిన అసలు ఫైల్లో మీరు కొన్ని మార్పులు చేయవచ్చు.
కొంత మనశ్శాంతి కోసం, sed
అసలు ఫైల్ దాని ఆదేశాన్ని అమలు చేయడానికి ముందు దాని బ్యాకప్ను సృష్టించగలదు.
మీరు ఇన్-ప్లేస్ ఎంపికను ఉపయోగించవచ్చు (-i
) చెప్పడానికిsed
అసలు ఫైల్కు మార్పులను వ్రాయడానికి, కానీ మీరు దానికి ఫైల్ పొడిగింపును జోడిస్తే, sed
అసలు ఫైల్ను క్రొత్తదానికి బ్యాకప్ చేస్తుంది. ఇది అసలు ఫైల్ మాదిరిగానే ఉంటుంది, కానీ క్రొత్త ఫైల్ పొడిగింపుతో ఉంటుంది.
ప్రదర్శించడానికి, మేము “అతడు” అనే పదాన్ని కలిగి ఉన్న ఏదైనా పంక్తుల కోసం శోధిస్తాము మరియు వాటిని తొలగిస్తాము. మేము BAK పొడిగింపును ఉపయోగించి మా అసలు ఫైల్ను క్రొత్తదానికి బ్యాకప్ చేస్తాము.
ఇవన్నీ చేయడానికి, మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
sed -i'.bak '' /^.*He.*$/d 'geeks.txt
మా బ్యాకప్ ఫైల్ మారదని నిర్ధారించుకోవడానికి మేము ఈ క్రింది వాటిని టైప్ చేస్తాము:
cat geeks.txt.bak
అవుట్పుట్ను క్రొత్త ఫైల్కు మళ్ళించడానికి మరియు ఇలాంటి ఫలితాన్ని సాధించడానికి మేము ఈ క్రింది వాటిని టైప్ చేయవచ్చు:
sed -i'.bak '' /^.*He.*$/d 'geeks.txt> new_geeks.txt
మేము ఉపయోగిస్తాము పిల్లి
దిగువ చూపిన విధంగా మార్పులు క్రొత్త ఫైల్కు వ్రాయబడిందని నిర్ధారించడానికి:
పిల్లి new_geeks.txt
అన్నింటినీ సెడ్ చేసింది
మీరు గమనించినట్లుగా, ఈ శీఘ్ర ప్రైమర్ కూడా ఆన్లో ఉంది sed
చాలా పొడవుగా ఉంది. ఈ ఆదేశానికి చాలా ఉన్నాయి మరియు మీరు ఇంకా ఎక్కువ చేయగలరు.
ఆశాజనక, అయితే, ఈ ప్రాథమిక అంశాలు మీరు మరింత నేర్చుకోవడం కొనసాగిస్తున్నప్పుడు మీరు నిర్మించగల దృ foundation మైన పునాదిని అందించాయి.