Бештар

Скрипти манбаи shapefile -ро пайдо кунед ва иваз накунед

Скрипти манбаи shapefile -ро пайдо кунед ва иваз накунед


Ман барои питон хеле нав ҳастам, илтимос, агар ин хатои оддӣ бошад, маро бубахшед. Ман хеле чанд MXD дорам, ки ҳар кадоме аз онҳо ба ҳамон манбаъ ишора мекунанд. Бо вуҷуди ин, ман ин маълумотро ба ҷузвдони нав интиқол додам. Ман скрипт навиштаам, то қабатҳои шабеҳро ба тариқи худкор тароват диҳам.

Скрипт аз назар мегузарад, аммо вақте ки ман месанҷам, ки оё он кор кардааст, ҳеҷ яке аз қабатҳои он нав карда намешавад. Ман боварӣ надорам, ки чӣ хато кардааст.

arcpy воридот, #workspace OS ба ҷустуҷӯ MXDs Workspace = р "M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  MXD" arcpy.env.workspace = Workspace #list ҳуҷҷатҳои харитаи дар папкаи mxdList = arcpy.ListFiles ( "* .mxd") mxdList чоп кунед # истиноди навро барои файли мушаххас дар ҳар як MXD дар рӯйхат таъин кунед. барои файл дар mxdList: # ҳуҷҷати харита барои тағир додани filePath = os.path.join (Ҷои кор, файл) mxd = arcpy.mapping.MapDocument (filePath) барои lyr дар arcpy.mapping.ListLayers (mxd): агар lyr.supports ( "DATASOURCE"): if lyr.dataSource == r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  MMO_South_Plan_Areas._Gp: Project": mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 ", р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP »), агар lyr.dataSource == р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  Land.shp ": lyr.findAndReplaceWorkspacePath (с« М:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 ", р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") arcpy.RefreshTOC () arcpy. RefreshActiveView () mxd.save () чоп "Муваффақият"

Тавре ки аз ҷониби @Luke шарҳ дода шуд ва вақте ки мо ҳарду дар самти кор будем:

Агар ин рамзи воқеии шумо бошад, for for lyr дар arcpy.mapping.ListLayers (mxd): loop танҳо дар mxd ниҳоӣ кор хоҳад кард, зеро он дар дохили файл дар mxdList: loop будан нахоҳад дошт.

Ба ҷои рамзи худ кӯшиш кунед:

arcpy воридот, #workspace OS ба ҷустуҷӯ MXDs Workspace = р "M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  MXD" arcpy.env.workspace = Workspace #list ҳуҷҷатҳои харитаи дар папкаи mxdList = arcpy.ListFiles ( "* .mxd") mxdList чоп кунед # истиноди навро барои файли мушаххас дар ҳар як MXD дар рӯйхат таъин кунед. барои файл дар mxdList: # ҳуҷҷати харита барои тағир додани filePath = os.path.join (Ҷои кор, файл) mxd = arcpy.mapping.MapDocument (filePath) барои lyr дар arcpy.mapping.ListLayers (mxd): агар lyr.supports ( "DATASOURCE"): if lyr.dataSource == r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  MMO_South_Plan_Areas._Gp: Project": mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 ", р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP »), агар lyr.dataSource == р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  Land.shp ": lyr.findAndReplaceWorkspacePath (с« М:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 ", р" M:  TEAM_GIS  EDKM  Лоиҳаҳо  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") mxd.save () print" Муваффақият "

Ман arcpy.RefreshActiveView () ва arcpy.RefreshTOC () -ро хориҷ кардам, зеро онҳо танҳо вақте кор мекунанд, ки объекти MapDocument-и шумо бо истифодаи "CURRENT" сохта шудааст.


Бо истифодаи ибораҳои муқаррарӣ ёбед ва иваз кунед

Ман файле дорам, ки як қатор пешфарзҳои корбарро дар бар мегирад. Ман мехоҳам баъзе матнро тағир диҳам, аммо ман бо матч ва ивазкунандаи он душворӣ мекашам. Бо истифода аз мисоли зерин:

Ман мехоҳам # Trackpad -ро иваз кунам:. бо иҷро кардани "Trackpad:."

Мушкилотро шикаста, ман бо истифода аз санҷиши regex чизеро пешкаш кардам:

Агар ман инро дар Vim истифода барам ва ин барои ман кор намекунад:

Ба гумони ман, мушкилоти ман ба ду саволи мушаххас такя мекунад:

  1. Чӣ тавр ман метавонам аз ҷустуҷӯи n аломат канорагирӣ кунам ва ба ҷои он боварӣ ҳосил кунам, ки # дар охири гурӯҳи ҷустуҷӯ пайдо нашавад?
  2. Чӣ гуна ман метавонам гурӯҳҳои забтро самаранок истифода кунам?

Дар зер чанд ҷавоби олӣ мавҷуд аст. Интихоби ҳар сеи он душвор аст, аммо ман ҳис мекунам, ки ҷавоби интихобшуда дақиқтарин барои мушаххасоти аслии ман аст. Ман тавсия медиҳам, ки ҳамаи се ҷавобро бо файли воқеӣ санҷед, то бубинед, ки шумо нисбати онҳо чӣ гуна муносибат доред.


3 ҷавоб 3

Ман пешниҳод мекунам, ки истифодаи вфармони тағир додан (ки аслан а г.elete дар якҷоягӣ бо аppend, гарчанде ки замима танҳо барои сатри охирини диапазон истифода мешавад, ки он чизест, ки шумо дар ин ҷо мехоҳед):

Дар ин ҷо истифодаи синтаксиси GNU sed барои таҳрири ҷойгоҳ (-i). Ин фармони c дар акси ҳол стандартӣ ва сайёр аст. GNU sed дастгирӣ мекунад:

ҳамчун тамдиди ғайристандартӣ.

Дар матни ивазшаванда аломатҳои сатри нав ва қафо бояд раҳо шаванд (бо хати аломат).

Истифодаи GNU sed

Барои иваз кардани хатҳое, ки сатри мувофиқати 3 -ро оғоз мекунанд ва идома додани хатти мувофиқати 5 бо Кодекси нав:

Барои сатрҳо дар диапазони / 3 /, / 5 /, мо месанҷем, ки оё сатр ба 5 мувофиқат мекунад (яъне ин сатри охирини гурӯҳ аст) ва агар ин тавр бошад, барои ворид кардани Кодекси нав иваз мекунем. Агар ивазкунӣ гузаронида шуда бошад, пас фармони t ба sed мегӯяд, ки то охири фармонҳо гузарад (дар ин ҳолат Кодекси нав чоп карда мешавад). Дар акси ҳол, фармони d ба sed мегӯяд, ки сатрро нест кунед.

Ҳама сатрҳои дигар ба таври муқаррарӣ чоп мешаванд.

Барои иваз кардани файл, имконоти -i метавонад истифода шавад:

Истифодаи awk

Фармони awk ба сатрҳо дар диапазони / 3 /, / 5 / махсус муносибат мекунад. Барои хатҳои ин диапазон мо месанҷем, ки f сифр аст (яъне, агар! F рост аст) ва агар бошад, Кодекси навро чоп карда f-ро ба 1 гузоштем ва боқимонда фармонҳоро гузарем ва ба сатри оянда.

Барои хатҳои берун аз ҳудуди / 3 /, / 5 /, ҳеҷ ҷаҳиш иҷро намешавад ва 1 боиси чоп шудани сатр мегардад. Ба таври муфассал, 1 шарт аст. Азбаски 1 сифр нест, шарт ба ҳақ рост арзёбӣ мешавад. Азбаски ягон амал бо шарт алоқаманд нест, амали пешфарз иҷро карда мешавад, ки ин чоп кардани сатр мебошад. Ҳамин тариқ, 1 стенография барои чопи хат мебошад.

Барои тағир додани файл дар ҷои худ, имконоти -i ҷои худро бо GNU awk 4.1 ё болотар истифода бурдан мумкин аст:


Man pax

. Муқоисаи вақт бо истифодаи ҳарду вақти файл муфид аст, вақте ки pax барои сохтани бойгонии афзояндаи вақт истифода мешавад (танҳо файлҳое, ки дар давоми як муддати муайян тағир дода шудаанд, бойгонӣ карда мешаванд).

Диапазони вақт аз шаш майдони гуногун иборат аст ва ҳар як майдон бояд ду рақам дошта бошад. Формат чунин аст:

Дар он ҷое ки cc ду рақами аввали сол (аср), yy ду рақами охири сол, мм аввал моҳ (аз 01 то 12), dd рӯзи моҳ (аз 01 то 31) ), HH соати рӯз (аз 00 то 23), MM дақиқа (аз 00 то 59) ва SS сонияҳо (аз 00 то 59). Майдони дақиқаи ММ лозим аст, дар ҳоле ки майдонҳои дигар ихтиёрӣ нестанд ва бояд бо навбат чунин илова карда шаванд:

Майдони SS метавонад новобаста аз дигар майдонҳо илова карда шавад. Диапазони вақт нисбат ба вақти ҳозира мебошад, аз ин рӯ.

. ҳамаи файлҳоро бо тағирот ё тағирёбии inode соати 12:34 шоми имрӯз ё баъдтар интихоб мекунад.

Бо бозии аввал диапазони вақти зиёдро пешниҳод кардан мумкин аст.

. ҳамин тавр 11 то он ҷое ки дар фармони мисоли ман мавҷуд аст, нисбат ба санаи имрӯза камтар аст - ин аз санаи имрӯза камтар аст - ин дувоздаҳум аст - ва боқимонда танҳо як формати стандартии "$ (date)" ва пас аз он вергул аст.

. ба истиснои - ва охирин чизе, ки бояд қайд кард - Ман барои каталоги ҳадаф як роҳи мутлақро истифода мекунам - ва агар шумо ин корро анҷом диҳед, пас бояд ҳамин тавр бошад. Ҳуҷҷатҳо ҳама истинод доранд рафтори номуайян барои роҳҳои нисбии ҳадаф - ва бори аввал ман бо истифода аз pax кӯшиш карда будам, ки як соат дар зери нофам бо ҳама натиҷаҳои аҷиб савганд ёд кунам, то он даме ки ман роҳи мутлақро истифода намебарам.


  • s = фармони ивазкунанда
  • аслӣ = ибораи муқаррарӣ, ки калимаи ивазшавандаро тавсиф мекунад (ё танҳо худи калима)
  • нав = матн бо иваз кардани он
  • g = ҷаҳонӣ (яъне ҳамаро иваз кунед ва на танҳо пайдоиши аввал)

Роҳҳои зиёди ба даст овардани он вуҷуд доранд. Вобаста аз мураккабии он чизе, ки шахс бо иваз кардани сатр ба даст оварданӣ мешавад ва вобаста аз воситаҳое, ки корбар бо онҳо шинос аст, баъзе усулҳо метавонанд нисбат ба баъзеҳо бартарӣ дошта бошанд.

Дар ин ҷавоб ман файли input.txt-и оддиро истифода мебарам, ки шумо метавонед онро барои санҷидани ҳамаи мисолҳои дар ин ҷо овардашуда истифода баред. Мазмуни парванда:

Bash аслан барои коркарди матн пешбинӣ нашудааст, аммо ивазкунии оддиро тавассути тавсеаи параметр анҷом додан мумкин аст, алахусус дар ин ҷо мо метавонем сохтори оддии $ -ро истифода барем .

Ин скрипти хурд ҷойивазкуниро иҷро намекунад, яъне шумо бояд матни навро ба файли нав захира кунед ва аз файли кӯҳна халос шавед, ё mv new.txt old.txt

Эзоҳ: агар шумо кунҷкоб бошед, ки чаро IFS = read -r do. done & lt input.txt истифода мешавад, ин асосан роҳи хониши файл ба сатр ба shell мебошад. Инро барои истинод бубинед.

AWK, ки як утилитаи коркарди матн аст, барои иҷрои ин вазифа комилан мувофиқ аст. Он метавонад ивазҳои оддӣ ва дар асоси ибораҳои муқаррарӣ ҷойгузинҳои хеле пешрафтаро иҷро кунад. Он ду вазифаро таъмин мекунад: sub () ва gsub (). Аввалин танҳо танҳо пайдоиши аввалро иваз мекунад, ва дуюм - дар ҳама сатр ҷойгузинҳоро иваз мекунад. Масалан, агар мо як картошка ду картошка дошта бошем, ин натиҷа хоҳад буд:

AWK метавонад файли вурудро ҳамчун далел қабул кунад, бинобар ин корҳоро бо input.txt анҷом додан осон хоҳад буд:

Вобаста аз версияи AWK-и шумо, он метавонад таҳрир дар дохили худ дошта бошад ё надорад, аз ин рӯ, таҷрибаи маъмулӣ сабт ва иваз кардани матни нав аст. Масалан, чизе монанди ин:

Sed муҳаррири сатр аст. Он инчунин ибораҳои муқаррариро истифода мебарад, аммо барои ивазкунии оддӣ ин кор кофист:

Чӣ хуби ин асбоб дар он аст, ки он вироиши ҷойивазкунӣ дорад, ки шумо метавонед онро бо парчами -i фаъол созед.

Perl як воситаи дигарест, ки аксар вақт барои коркарди матн истифода мешавад, аммо ин як забони таъиноти умумист ва дар шабака, маъмурияти система, барномаҳои мизи корӣ ва бисёр ҷойҳои дигар истифода мешавад. Он аз забонҳои дигар, аз қабили C, sed, awk ва ғайра бисёр мафҳумҳо / хусусиятҳо гирифтааст. Ивази оддиро ба тариқи зайл анҷом додан мумкин аст:

Монанди сед, перл низ парчами -i дорад.

Python

Ин забон хеле гуногун аст ва инчунин дар замимаҳои гуногун истифода мешавад. Он барои кор бо сатрҳо бисёр вазифаҳо дорад, ки дар байни онҳо replace () мавҷуданд, бинобар ин, агар шумо тағирёбандае ба монанди var = "Hello World" дошта бошед, шумо метавонед var.replace ("Салом", "Субҳи хуб") -ро иҷро кунед.

Усули оддии хондани файл ва иваз кардани сатр дар он чунин хоҳад буд:

Аммо, бо Python, шумо инчунин бояд файлҳои навро баровардед, ки шумо метавонед онро аз дохили худи скрипт иҷро кунед. Масалан, ин як чизи оддӣ:

Ин скрипт бояд бо input.txt ҳамчун далели сатри фармон номида шавад. Фармони дақиқи иҷро кардани скрипти python бо далели сатри фармон мебуд

Албатта, боварӣ ҳосил кунед, ки ./myscript.py дар феҳристи кории ҷории шумост ва бо роҳи аввал, онро бо chmod + x ./myscript.py иҷрошаванда таъин кунед.

Python инчунин метавонад ибораҳои муқаррарӣ дошта бошад, аз ҷумла модули re, ки функсияи re.sub () дорад, ки барои ивазкунии мукаммалтар истифода мешавад.

Якчанд роҳҳои гуногуни ин кор мавҷуданд. Яке аз sed ва Regex истифода мекунад. SED муҳаррири ҷараён барои филтр ва табдил додани матн аст. Як мисол чунин аст:

Роҳи дигаре, ки метавонад нисбат ба & lt strin ва & gt strout маънои бештар дошта бошад, қубурҳост!

5 маротиба тезтар. & ndash pbhj 22 октябри '17 соати 20:14

Шумо метавонед Vim -ро дар ҳолати Ex истифода баред:

g ҳама мисолҳоро дар ҳар сатр иваз кунед

х нависед, агар тағиротҳо ворид карда шаванд (онҳо доранд) ва хориҷ шаванд

Тавассути фармони gsub awk,

Дар мисоли боло, ҳама 1ҳо новобаста аз сутуне, ки дар он ҷойгир буд, ба 0 иваз карда мешаванд.

Агар шумо хоҳед, ки дар сутуни мушаххас иваз кунед, пас инро ба ҷо оваред,

Он танҳо 1 сутуни якумро бо 0 иваз мекунад.

аст сҷараён editor, дар он шумо метавонед истифода баред | (қубур) фиристодан ҷараёнҳои стандартӣ (STDIN ва STDOUT махсус) тавассути sed ва тағир додани онҳо ба таври фаврӣ, онро ба як воситаи муфид дар анъанаи фалсафаи Unix табдил медиҳанд, аммо файлҳоро мустақиман низ бо истифода аз параметри дар поён овардашуда таҳрир карда метавонанд.
Ба инҳо диққат диҳед:

с / одат кардааст сибораи ёфтшударо бо асд иваз кунед:

/ g маънои "ҷаҳонӣ" -ро дорад, яъне маънои онро дар тамоми сатр иҷро кардан лозим аст. Агар шумо / g-ро хомӯш кунед (бо s / few / asd /, новобаста аз он ки ҳамеша се бурриш вуҷуд дорад) ва каме дар ду сатр дар як сатр пайдо шавад, танҳо чанд нафари аввал ба asd иваз карда мешаванд:

Чанд мард, чанд зан, ҷасур.

Мардони асд, чанд зан, ҷасур.

Ин дар баъзе ҳолатҳо муфид аст, ба монанди тағир додани аломатҳои махсус дар ибтидои сатрҳо (масалан, иваз кардани рамзҳои бузургтар аз баъзе одамон барои иқтибос кардани маводи қаблӣ дар риштаҳои почтаи электронӣ бо ҷадвалбанди уфуқӣ, дар ҳоле ки нобаробарии алгебравии иқтибосшударо баъдтар дар хат дастнорас), аммо дар мисоли шумо, ки шумо инро муайян мекунед дар ҳама ҷо кам рух медиҳад, ки онро бояд иваз кард, боварӣ ҳосил кунед, ки ин / g аст.

Ду варианти зерин (парчамҳо) ба як, -ie якҷоя карда мешаванд:

-i хосият барои таҳрир истифода мешавад манn ҷой дар файли hello.txt.

-e хосият нишон медиҳад дxpression / фармони иҷро, дар ин ҳолат s /.

Эзоҳ: Муҳим аст, ки шумо -i -e -ро барои ҷустуҷӯ / ивазкунӣ истифода баред. Агар шумо -ie кор кунед, шумо нусхаи эҳтиётии ҳар як файлро бо ҳарфи 'e' замима эҷод мекунед.


Дар ин ҷо ман sed -ро иваз мекунам, то ки ҳар як вожаи калимаи "cybernetnews" -ро бо "cybernet" дар ҳар як файли бо васеъшавии c, дар директория, / home / user / directory / иваз кунам.

Варианти умумӣ, ки дар он шумо рекурсивро аз феҳристи иҷрои ҷустуҷӯ анҷом медиҳед ва танҳо дар файлҳои муқаррарӣ, хонданӣ ва навиштанӣ кор мекунед:

Муҳаррири ҷараён, sed, як утилитаи пурқувватест барои ин гуна корҳо ва интихоби аввалини ман аст, аммо агар шумо хоҳед, ки инро аз як муҳаррири матни оддӣ бо истифодаи замимаи модарии Ubuntu иҷро кунед, ман тавсия медиҳам ба Jedit назар андозед , Он дар анборҳо мавҷуд аст ва онро бо навиштан дар консол насб кардан мумкин аст:

Jedit -ро оғоз кунед, менюи менюи ҷустуҷӯро пахш кунед, дар рӯйхати менюҳо, Search in in Directory ро пахш кунед, ба шумо муколамаи зерин пешниҳод карда мешавад:

Ин ба он шабеҳи Notepad ++ монанд аст ва худи ҳамон корро мекунад, ман боварӣ дорам, ки ин чизест, ки шумо мехоҳед.


Якчанд арзишҳои гуногунро якбора ёбед ва иваз кунед

Ман як файл бо якчанд мисолҳои Text_1 ва Text1 дорам ва ба ман лозим аст, ки ҳарду сатрро мутаносибан бо Text_A ва TextB иваз намоям.

Дар айни замон ман дар ҳар як файл ду функсияи Ёфтан ва Иваз кардани якеро иҷро карда истодаам, ки Text_1-ро ёфта, онро бо Text_A иваз мекунад ва дигаре, ки Text1-ро ёфта бо TextB иваз мекунад.

Оё роҳи иҷрои ин кор якбора вуҷуд дорад, ба ҷои он ки ду бор "Ёфтан ва Иваз" ро иҷро кунед?

Ман Dreamweaver CS3 -ро истифода мебарам, аммо ман Notepad ++, Notepad мунтазам, OO Writer, MS Word, агар ин осонтар бошад. Идеалӣ, ман метавонистам инро дар Dreamweaver ё Notepad ++ иҷро кунам, аммо ман барои ба анҷом расонидани кор чизи дигареро зеркашӣ мекунам. Ман мехоҳам ягон чизи сатри фармонро иҷро накунам ё файли партияро эҷод накунам (дар ҳоле ки ман инро медонам, ман инро дарк намекунам).

Агар тавсифи дар боло овардашуда равшан набошад, иҷозат диҳед ин тавр шарҳ диҳам.

Ман мехоҳам Find & amp Replace ро иҷро кунам 1 бор дар 1 ҳуҷҷат ва ман инро мехоҳам ҲАМА аз инҳо дар давоми ин як мисоли Find & amp Replace:

  1. Ёфтан Матни_1 ва Иваз бо Text_A
  2. Ёфтан Матни1 ва Иваз бо TextB

ман мебошам не кӯшиши дар якчанд ҳуҷҷатҳо ёфтан ва иваз кардан.


9 ҷавоб 9

Дар асл бо sed хеле содда аст: агар сатр мувофиқат кунад, онро танҳо ба фосилаи кӯҳна нусхабардорӣ кунед, пас арзиши онро иваз кунед.
Дар хати la $ t e ​​x тағирот фазо ва фазои намунаро нигоҳ доред ва пас холӣ будани онро тафтиш кунед. Агар ин холӣ набошад, ин маънои онро дорад, ки ивазкунӣ аллакай сохта шудааст, бинобар ин ҳеҷ коре карда намешавад. Агар он холӣ бошад, ин маънои онро дорад, ки ягон гӯгирд ёфт нашуд, бинобар ин ҷойгоҳи намунаро бо матлуб иваз кунед тағйирёбанда = арзиш пас ба хатти ҷорӣ дар буфери нигоҳдорӣ илова кунед. Ниҳоят, e x тағир меёбад:


Барои иваз кардани шумо, шумо танҳо фосила гузоштан мехоҳед. [: space:] он ҷо кор нахоҳад кард, зеро ин ихтисораи синфи аломат аст ва муҳаррики regex намедонад, ки дар он чӣ аломат гузошта мешавад.

+ Бояд дар регекс гурехта шавад, зеро бо муҳаррики регекси сед + аломати муқаррарӣ аст, дар ҳоле ки + метахарактери 'як ё якчанд' аст. Дар саҳифаи 86 аз Азхудкунии ибораҳои муқаррарӣ, Ҷеффри Фридл дар як эзоҳи худ ёдовар мешавад, ки ed ва grep қавсҳои фироршударо истифода карданд, зеро "Кен Томпсон ҳис кард, ки ибораҳои муқаррарӣ барои кор бо асосан бо рамзи C истифода мешаванд, дар он ҷое ки ниёз ба мувофиқаи қавсҳои хом нисбат ба бозгашти бештар маъмул хоҳад буд." Ман тахмин мезанам, ки ӯ нисбати аломати плюс ҳамин гуна ҳис мекард, аз ин рӯ, зарурати гурехтан аз он истифода бурд, то онро ҳамчун метахарактер истифода барад. Бо ин ба осонӣ афтодан осон аст.

Дар sed ба шумо лозим аст, ки гурехта +,? , | , (, ва). ё истифода аз -r барои истифодаи regex васеъ (пас чунин менамояд, ки sed -r -e "s / [[: space:]] + / / g" or sed -re "s / [[: space:]] + / / g "


ин ҷо рав
http://gnuwin32.sourceforge.net/packages.html
ба SED ҳаракат кунед. Ҳангоме ки шумо дар он ҳастед, coreutils -ро низ зеркашӣ кунед.

ин фармон дар саросари ҷаҳон ва дар ҳар як сатр а -ро бо b иваз мекунад. ҳамин тавр на танҳо пайдоиши аввал дар хат.

VBScript ибораҳои муқаррариро дастгирӣ мекунад, шумо метавонед онро бо он пайдо ва иваз намоед.

Ман барои Windows як абзори ройгони сатри фармон навиштаам. Он rxrepl номида мешавад, он Unicode ва ҷустуҷӯи файлро дастгирӣ мекунад. Баъзеҳо метавонанд онро як воситаи муфид пайдо кунанд.

rxrepl воситаи хати фармони Microsoft Windows барои ҷустуҷӯ ва иваз кардани матн дар файлҳои матнӣ бо истифодаи ибораҳои муқаррарии Perl (PCRE) мебошад.

Он дорои хусусиятҳои зерин аст:

  • Бо ибораҳои муқаррарии Perl мувофиқро ҷустуҷӯ кунед
  • Мутобиқати гурӯҳиро дар матни ивазкунанда истифода баред
  • Поёни хатҳои Windows ва Unix -ро дастгирӣ мекунад
  • Дастгирии Юникод
  • Якчанд ҷустуҷӯро қабул мекунад / далелҳоро иваз мекунад
  • Имконотро дар файли опсия пешниҳод кардан мумкин аст
  • Скан кардани файлҳо
  • Ҳолати пешнамоиш
  • Режимҳои мувофиқкунии сатр ва парванда

Гайи скриптӣ ин корро дар PowerShell дар бар мегирад (ҳеҷ зеркашии иловагӣ дар охирин ОС Windows, эҳтимолан шумо аллакай онро насб кардаед).

Онро оғоз кунед, зеринро иҷро кунед (барои иваз кардани * бо @):

Ин ибораҳои муқаррарии .NET-ро дастгирӣ мекунад, аз ҷумла назари мусбат ва манфӣ ва ҳама чизҳои notepad ++ бо regex пеш аз версияи 6.x пуштибонӣ намекарданд (ба қадри ман, ки ман notepad ++ ро дӯст медорам).

Ман барои он fnr.exe ёфтам. Он дорои GUI ва сатри фармон мебошад.

Воситаи кушодаасос барои дарёфт ва иваз кардани матн дар якчанд файл.

Вижагиҳо

  • Боргирии файли ягона - fnr.exe (127kb)
  • Матнро бо истифодаи замимаи windows ё тавассути сатри фармон дар якчанд файл иваз кунед
  • Ёфтан танҳо барои дидани куҷо гӯгирд ёфт мешавад
  • Ҷустуҷӯи ба парванда ҳассос
  • Ҷустуҷӯи файлҳо дар як директория ё зеркаталогҳои рекурси
  • Ибораҳои муқаррарӣ
  • Матни бисёрсатраро ёбед ва иваз кунед
  • Эҷоди тугмаи сатри фармон барои сохтани матни сатри фармон барои дар файли дастаҷамъӣ сохтан
  • Кӯмаки хатти фармон
  • Санҷишҳои воҳиди муҳаррики Find / Replace

Дидани имконоти сатри фармон

Чунин ба назар мерасад, ки шумо метавонед regex -ро бо FINDSTR истифода баред

findstr имкон медиҳад, ки матнро ҷустуҷӯ кунад (тавре ки бо намуна дар номи номи файл нишон дода шудааст. Агар номи файл рамзҳои ҷудогона (* ё?) дошта бошад, он дар ҳамаи файлҳои мувофиқат ҷустуҷӯ мекунад. Option / S дар феҳристи ҷорӣ ва инчунин ҷустуҷӯ мекунад Агар намуна фосилаҳо дошта бошад, он бояд чунин монанд карда шавад / C: & матни квотомӣ барои ҷустуҷӯ & quot. Барои табдил додани намуна ба ибораҳои муқаррарӣ, варианти / R бояд истифода шавад. / I хосият / I ҳарфро беэътино мекунад.

Аз Кӯмаки FindStr (Findstr /?):

/ R - сатрҳои ҷустуҷӯро ҳамчун ибораҳои муқаррарӣ истифода мебарад.

Ман каме ба ҳизб дер шудам, аммо JREPL.BAT як утилитаи гибридии JScript / дастаҳои скриптҳои регегиест, ки дар асл дар ҳама гуна мошинҳои Windows аз XP ба кор медароянд.

Ҳуҷҷатҳои пурра дар скрипт сохта шудаанд, ки тавассути JREPL / дастрас кардан мумкин аст? , ё JREPL / ?? -ро истифода баред барои баромади саҳифавӣ.

JREPL regex стандартии ECMA -ро истифода мебарад, ки бо JScript меояд. ECMA regex он қадар пурқувват нест, ки .gex regex, ки барои powerhell дастрас аст, аммо он ҳанӯз ҳам хуб аст. Ва ман фикр мекунам, ки корбари оддӣ истифодаи ин утилитро нисбат ба powerhell осонтар хоҳад ёфт.

Вариантҳои дарунсохти JREPL аллакай қувваи хосро фароҳам меоранд, аммо қобилияти ворид кардани JScript ба корбари додашуда воқеан имкониятҳои аҷибро мекушояд.

Ман скриптро таҳия карда будам, зеро ҷои корам зеркашии файлҳои ғайристандартии exe-ро иҷозат намедиҳад, аммо дар навиштани даста ё скриптҳои JScript маҳдудият надорад :-)