బాష్లో స్ట్రింగ్ మానిప్యులేషన్ను విచ్ఛిన్నం చేయడం
షెల్ స్క్రిప్ట్లతో పని చేస్తున్నప్పుడు, డీలిమిటర్ ఆధారంగా స్ట్రింగ్ను విభజించడం ఒక సాధారణ పని. ఉదాహరణకు, సెమికోలన్లతో వేరు చేయబడిన ఇమెయిల్ చిరునామాలను కలిగి ఉన్న స్ట్రింగ్ను పరిగణించండి. మీరు ప్రతి ఇమెయిల్ను ఒక్కొక్కటిగా ప్రాసెస్ చేయవలసి వస్తే, ఈ స్ట్రింగ్ను ఎలా విభజించాలో అర్థం చేసుకోవడం చాలా అవసరం. బాష్లో దీన్ని సాధించడానికి వివిధ పద్ధతుల ద్వారా ఈ కథనం మీకు మార్గనిర్దేశం చేస్తుంది.
మేము `tr` ఆదేశాన్ని ఉపయోగించడం మరియు అంతర్గత ఫీల్డ్ సెపరేటర్ (IFS)ని మార్చడం వంటి పరిష్కారాలను అన్వేషిస్తాము. చివరికి, మీరు స్ట్రింగ్ విభజనను సమర్ధవంతంగా నిర్వహించగలరు మరియు IFSని దాని డిఫాల్ట్ విలువకు రీసెట్ చేయగలరు. మీ బాష్ స్క్రిప్టింగ్ పనులను సులభతరం చేద్దాం!
| ఆదేశం | వివరణ |
|---|---|
| tr | అక్షరాలను అనువదిస్తుంది లేదా తొలగిస్తుంది. స్ట్రింగ్ను విభజించడానికి సెమికోలన్ను కొత్త లైన్ అక్షరంతో భర్తీ చేయడానికి ఇక్కడ ఉపయోగించబడుతుంది. |
| IFS | ఇంటర్నల్ ఫీల్డ్ సెపరేటర్, బాష్ స్క్రిప్ట్లలోని నిర్దిష్ట డీలిమిటర్ ఆధారంగా స్ట్రింగ్లను విభజించడానికి ఉపయోగిస్తారు. |
| read -r -a | ఇన్పుట్ పంక్తిని చదివి, దానిని శ్రేణిగా విభజిస్తుంది. -r ఎంపిక బ్యాక్స్లాష్లను ఎస్కేప్ క్యారెక్టర్లుగా అర్థం చేసుకోకుండా నిరోధిస్తుంది. |
| echo | ప్రామాణిక అవుట్పుట్కు వచనాన్ని ప్రింట్ చేస్తుంది. స్ప్లిట్ స్ట్రింగ్ ఎలిమెంట్లను ప్రదర్శించడానికి ఉపయోగించబడుతుంది. |
| split | పేర్కొన్న డీలిమిటర్ ఆధారంగా స్ట్రింగ్ను స్ట్రింగ్ల జాబితాగా విభజించే పెర్ల్ ఫంక్షన్. |
| foreach | విలువల జాబితాపై పునరావృతమయ్యే పెర్ల్ లూప్ నిర్మాణం. |
బాష్ స్ట్రింగ్ స్ప్లిటింగ్ టెక్నిక్స్ను అర్థం చేసుకోవడం
మొదటి బాష్ స్క్రిప్ట్ ఉపయోగించి స్ట్రింగ్ను ఎలా విభజించాలో చూపుతుంది tr ఆదేశం. ఇక్కడ, మేము ఒక స్ట్రింగ్ను నిర్వచించాము IN="bla@some.com;john@home.com" మరియు ఉపయోగించండి echo కలిసి tr సెమికోలన్ డీలిమిటర్ను కొత్త లైన్ అక్షరంలోకి అనువదించడానికి. ఇది స్ట్రింగ్ను వ్యక్తిగత పంక్తులుగా సమర్థవంతంగా విచ్ఛిన్నం చేస్తుంది. ది for లూప్ ప్రతి పంక్తిపై మళ్ళిస్తుంది, చిరునామాలను చదరపు బ్రాకెట్లలో ముద్రిస్తుంది. ఈ పద్ధతి సూటిగా ఉంటుంది మరియు స్ట్రింగ్లను మార్చటానికి Unix ఆదేశాల యొక్క శక్తివంతమైన టెక్స్ట్ ప్రాసెసింగ్ సామర్థ్యాలను ప్రభావితం చేస్తుంది.
మరొక పద్ధతిలో సర్దుబాటు ఉంటుంది Internal Field Separator (IFS). తాత్కాలికంగా సెట్ చేయడం ద్వారా IFS సెమికోలన్కు, మేము స్ట్రింగ్ను శ్రేణిగా విభజించవచ్చు. మేము అసలైనదాన్ని సేవ్ చేస్తాము IFS కు OIFS దానిని సవరించే ముందు, మేము దానిని తర్వాత పునరుద్ధరించగలమని నిర్ధారించుకోండి. ది read -r -a కమాండ్ ఇన్పుట్ స్ట్రింగ్ను శ్రేణిలోకి చదువుతుంది mails2, సవరించిన దాని ఆధారంగా విభజించడం IFS. ప్రాసెస్ చేసిన తర్వాత, అసలు IFS పునరుద్ధరించబడింది. ఈ విధానం బాష్లో స్ట్రింగ్ స్ప్లిటింగ్ను నిర్వహించడానికి మరింత ప్రోగ్రామాటిక్ మార్గాన్ని అందిస్తుంది, ఇది మరింత తారుమారు కోసం శ్రేణులను ఉపయోగించుకోవడానికి మాకు వీలు కల్పిస్తుంది.
డీలిమిటర్పై స్ట్రింగ్లను విభజించడానికి బాష్ని ఉపయోగించడం
బాష్ స్క్రిప్ట్
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Split string using 'tr' and iteratemails=$(echo $IN | tr ";" "\n")for addr in $mails; doecho "> [$addr]"done# Output:# > [bla@some.com]# > [john@home.com]
IFSని ఉపయోగించి బాష్లో స్ట్రింగ్ను విభజించడం
బాష్ స్క్రిప్ట్
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Save the original IFSOIFS=$IFS# Set IFS to semicolonIFS=';'# Split string into an arrayread -r -a mails2 <<< "$IN"# Restore the original IFSIFS=$OIFS# Iterate over the arrayfor x in "${mails2[@]}"; doecho "> [$x]"done# Output:# > [bla@some.com]# > [john@home.com]
స్ట్రింగ్ స్ప్లిటింగ్ కోసం పైథాన్ని ఉపయోగించడం
పైథాన్ స్క్రిప్ట్
#!/usr/bin/env python3# Input stringIN = "bla@some.com;john@home.com"# Split string by semicolonmails = IN.split(';')# Iterate and print each elementfor addr in mails:print(f"> [{addr}]")# Output:# > [bla@some.com]# > [john@home.com]
స్ట్రింగ్ను విభజించడానికి పెర్ల్ని ఉపయోగించడం
పెర్ల్ స్క్రిప్ట్
#!/usr/bin/env perluse strict;use warnings;# Input stringmy $IN = "bla@some.com;john@home.com";# Split string by semicolonmy @mails = split(';', $IN);# Iterate and print each elementforeach my $addr (@mails) {print "> [$addr]\n";}# Output:# > [bla@some.com]# > [john@home.com]
బాష్లో అధునాతన స్ట్రింగ్ స్ప్లిటింగ్ టెక్నిక్స్
బాష్లో తీగలను విభజించడానికి మరొక శక్తివంతమైన పద్ధతిని ఉపయోగించడం awk ఆదేశం. awk నమూనా స్కానింగ్ మరియు ప్రాసెసింగ్ కోసం రూపొందించబడిన బహుముఖ కమాండ్-లైన్ యుటిలిటీ. ఇది కస్టమ్ ఫీల్డ్ సెపరేటర్లను నిర్వచించడానికి అనుమతిస్తుంది కాబట్టి ఇది స్ట్రింగ్లను విభజించడానికి ప్రత్యేకంగా ఉపయోగపడుతుంది. ఉదాహరణకు, మనం ఉపయోగించవచ్చు awk -F";" '{print $1, $2}' సెమికోలన్ డీలిమిటర్ ఆధారంగా స్ట్రింగ్ను విభజించడానికి మరియు వ్యక్తిగత భాగాలను ముద్రించడానికి. ఈ పద్ధతి చాలా సరళమైనది మరియు మరింత క్లిష్టమైన స్ట్రింగ్ మానిప్యులేషన్ పనులను నిర్వహించగలదు, ఇది బాష్ ప్రోగ్రామర్ టూల్కిట్లో విలువైన సాధనంగా మారుతుంది.
అదనంగా, ది cut డీలిమిటర్ల ఆధారంగా స్ట్రింగ్లను విభజించడానికి కమాండ్ని ఉపయోగించవచ్చు. ది cut ఇన్పుట్ డేటా యొక్క ప్రతి లైన్ నుండి విభాగాలను సంగ్రహించడానికి కమాండ్ సాధారణంగా ఉపయోగించబడుతుంది. దీనితో డీలిమిటర్ని పేర్కొనడం ద్వారా -d ఎంపిక మరియు ఫీల్డ్లను ఎంచుకోవడం -f ఎంపిక, మేము స్ట్రింగ్ యొక్క భాగాలను సమర్ధవంతంగా విభజించవచ్చు మరియు సంగ్రహించవచ్చు. ఉదాహరణకు, ఉపయోగించడం echo $IN | cut -d';' -f1 ఇన్పుట్ స్ట్రింగ్ నుండి మొదటి ఇమెయిల్ చిరునామాను సంగ్రహిస్తుంది. ఈ అధునాతన పద్ధతులు బాష్లో స్ట్రింగ్ మానిప్యులేషన్ పనులకు మరింత నియంత్రణ మరియు ఖచ్చితత్వాన్ని అందిస్తాయి.
బాష్లో స్ట్రింగ్ స్ప్లిటింగ్ గురించి సాధారణ ప్రశ్నలు మరియు సమాధానాలు
- బాష్లోని డీలిమిటర్పై స్ట్రింగ్ను ఎలా విభజించాలి?
- మీరు ఉపయోగించవచ్చు IFS వేరియబుల్ లేదా ఆదేశాలు వంటి tr, awk, మరియు cut డీలిమిటర్పై తీగలను విభజించడానికి.
- ఏమిటి IFS బాష్లో వేరియబుల్?
- ది IFS (ఇంటర్నల్ ఫీల్డ్ సెపరేటర్) అనేది ఇన్పుట్ వచనాన్ని పదాలు లేదా టోకెన్లుగా విభజించడానికి ఉపయోగించే అక్షర(ల)ని నిర్వచించే ప్రత్యేక వేరియబుల్.
- నేను ఎలా రీసెట్ చేయగలను IFS దాని డిఫాల్ట్ విలువకు వేరియబుల్?
- అసలైనదాన్ని సేవ్ చేయండి IFS మార్చడానికి ముందు విలువ, మరియు ప్రాసెస్ చేసిన తర్వాత దాన్ని పునరుద్ధరించండి: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- ఏమి చేస్తుంది tr కమాండ్ డు స్ట్రింగ్ స్ప్లిటింగ్లో చేయాలా?
- ది tr కమాండ్ అక్షరాలను అనువదిస్తుంది లేదా తొలగిస్తుంది. ఇది స్ట్రింగ్ను విభజించడానికి డీలిమిటర్లను కొత్త లైన్లతో భర్తీ చేయగలదు: echo $IN | tr ";" "\n".
- నేను బాష్ని ఉపయోగించి స్ట్రింగ్ను అర్రేగా విభజించవచ్చా?
- అవును, మార్చడం ద్వారా IFS వేరియబుల్ మరియు ఉపయోగించడం read -r -a, మీరు స్ట్రింగ్ను శ్రేణిగా విభజించవచ్చు: read -r -a array <<< "$string".
- ఏమిటి awk కమాండ్ ఉపయోగించబడింది?
- awk నమూనా స్కానింగ్ మరియు ప్రాసెసింగ్ కోసం కమాండ్-లైన్ యుటిలిటీ. ఇది కస్టమ్ ఫీల్డ్ సెపరేటర్లను నిర్వచించడం ద్వారా స్ట్రింగ్లను విభజించగలదు.
- ఎలా చేస్తుంది cut కమాండ్ వర్క్?
- ది cut కమాండ్ ప్రతి ఇన్పుట్ లైన్ నుండి విభాగాలను సంగ్రహిస్తుంది. ఇది డీలిమిటర్ను పేర్కొనడం మరియు ఫీల్డ్లను ఎంచుకోవడం ద్వారా స్ట్రింగ్లను విభజించగలదు: echo $string | cut -d';' -f1.
- ఎందుకు వాడుతున్నారు IFS స్ట్రింగ్ విభజనలో సహాయకారిగా ఉందా?
- ఉపయోగించి IFS స్ట్రింగ్లను విభజించడం కోసం అనుకూల డీలిమిటర్లను నిర్వచించడానికి మిమ్మల్ని అనుమతిస్తుంది, ఇది విభిన్న ఇన్పుట్ ఫార్మాట్లకు బహుముఖంగా చేస్తుంది.
- బాష్లో బహుళ డీలిమిటర్ల ద్వారా స్ట్రింగ్ను విభజించడం సాధ్యమేనా?
- అవును, మీరు కలయికను ఉపయోగించవచ్చు tr మరియు awk బహుళ డీలిమిటర్లను నిర్వహించడానికి.
- నేను ఉపయోగించ వచ్చునా sed బాష్లో స్ట్రింగ్ స్ప్లిటింగ్ కోసం?
- కాగా sed ప్రధానంగా స్ట్రీమ్ ఎడిటర్, ఇది వంటి ఇతర ఆదేశాలతో కలపవచ్చు awk పరోక్షంగా తీగలను విభజించడానికి.
బాష్లో స్ట్రింగ్ స్ప్లిటింగ్పై తుది ఆలోచనలు
బాష్లో మాస్టరింగ్ స్ట్రింగ్ మానిప్యులేషన్ మీ స్క్రిప్టింగ్ సామర్థ్యాన్ని గణనీయంగా మెరుగుపరుస్తుంది. వాడుతున్నా IFS సాధారణ డీలిమిటర్లు లేదా మరిన్ని అధునాతన సాధనాల కోసం tr మరియు awk, సమర్థవంతమైన బాష్ ప్రోగ్రామింగ్ కోసం ఈ పద్ధతులు అవసరం. ఎల్లప్పుడూ అసలైనదాన్ని పునరుద్ధరించాలని గుర్తుంచుకోండి IFS మీ స్క్రిప్ట్లలో ఊహించని ప్రవర్తనను నివారించడానికి. ఈ పద్ధతులతో, మీరు మీ బాష్ స్క్రిప్ట్లలో విస్తృత శ్రేణి స్ట్రింగ్ ప్రాసెసింగ్ టాస్క్లను నిర్వహించవచ్చు.