如何使用python或gnu工具解析并在文件中插入一行

时间:2017-04-01 05:57:24

标签: string file parsing unix

我想以编程方式将@RestControllerAdvice添加到django settings.py文件中,如下所示:

之前:

 #0. Crashed: com.apple.main-thread
0 Appname               0x100062540 ageCalculatorVC.calculate() -> () (ageCalculatorVC.swift:127)
1  Appname               0x100063190 specialized ageCalculatorVC.dateChange(AnyObject) -> () (ageCalculatorVC.swift:96)
2  Appname               0x1000615fc @objc ageCalculatorVC.dateChange(AnyObject) -> () (ageCalculatorVC.swift)
3  UIKit                          0x1905230ec -[UIApplication sendAction:to:from:forEvent:] + 96
4  UIKit                          0x19052306c -[UIControl sendAction:to:forEvent:] + 80
5  UIKit                          0x19050d5e0 -[UIControl _sendActionsForEvents:withEvent:] + 440
6  UIKit                          0x190e1b1f0 -[_UIDatePickerView pickerView:didSelectRow:inComponent:] + 540
7  UIKit                          0x19075e468 -[UIPickerView _sendSelectionChangedForComponent:notify:] + 116
8  UIKit                          0x19075e69c -[UIPickerView _sendSelectionChangedFromTable:notify:] + 340
9  UIKit                          0x190c986b8 -[UIPickerTableView _scrollingFinished] + 188
10 UIKit                          0x190c98890 -[UIPickerTableView scrollViewDidEndDecelerating:] + 28
11 UIKit                          0x19080051c -[UIScrollView(UIScrollViewInternal) _scrollViewDidEndDeceleratingForDelegate] + 132
12 UIKit                          0x190693188 -[UIScrollView(UIScrollViewInternal) _stopScrollDecelerationNotify:] + 360
13 UIKit                          0x190692c28 -[UIScrollView _smoothScrollWithUpdateTime:] + 2420
14 UIKit                          0x190692230 -[UIScrollView _smoothScrollDisplayLink:] + 560
15 QuartzCore                     0x18d5ce600 CA::Display::DisplayLinkItem::dispatch(unsigned long long) + 44
16 QuartzCore                     0x18d5ce4b0 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 436
17 IOKit                          0x18a62bdd4 IODispatchCalloutFromCFMessage + 372
18 CoreFoundation                 0x18a355958 __CFMachPortPerform + 180
19 CoreFoundation                 0x18a36dadc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
20 CoreFoundation                 0x18a36d27c __CFRunLoopDoSource1 + 436
21 CoreFoundation                 0x18a36ad90 __CFRunLoopRun + 1752
22 CoreFoundation                 0x18a29ad94 CFRunLoopRunSpecific + 424
23 GraphicsServices               0x18bd04074 GSEventRunModal + 100
24 UIKit                          0x190553130 UIApplicationMain + 208
25 Appname               0x10007c6f0 main (AppDelegate.swift:17)
26 libdyld.dylib                  0x1892a959c start + 4

--

后:

//MARK: calculate
    func calculate()
    {
        outPutLabel.hidden=true

        if(birthDayTxt.text?.characters.count>0)
        {
             outPutLabel.hidden=false

            let calendar = NSCalendar.currentCalendar()


            let dateFormatter = NSDateFormatter()
            dateFormatter.dateStyle = .LongStyle

            //birthday
            let Fromdate = dateFormatter.dateFromString(birthDayTxt.text!)

            let Components1 = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year], fromDate:Fromdate!)

            self.FromDateValue = calendar.dateFromComponents(Components1)!

            //today
            let Components2 = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year], fromDate:NSDate())

            self.ToValueDate = calendar.dateFromComponents(Components2)!
            print(ToValueDate)



            let diffDateComponents = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute], fromDate: FromDateValue!, toDate: ToValueDate!, options: NSCalendarOptions.init(rawValue: 0))

            let str="\(diffDateComponents.year) years, \(diffDateComponents.month) months, \(diffDateComponents.day) days"
            outPutLabel.text=str
            animateLabel(outPutLabel)
        }

    }

我想到的是以下步骤:

  1. 在文件中找到'someapp'字符串
  2. 找到... ... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', ] ... 字符串以指示解析字符串的结尾。
  3. 获取... ... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'someapp', ] ... 中的所有项目以避免冲突
  4. ^INSTALLED_APPS = [添加到]
  5. 的末尾

    这看起来像一个简单的问题,但我仍然想知道如何用最佳实践来做到这一点。

    虽然这是关于python脚本的,但是也欢迎使用GNU工具的bash脚本,如sed,awk,grep。

0 个答案:

没有答案