(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:temp) op: assign_op.Equal rhs: {(/tmp/runsed) ($ Id.VSub_Dollar '$$')} spids: [41] ) ] ) (command.Pipeline children: [ (C {(find)} {(DQ ($ Id.VSub_At '$@'))} {(-type)} {(f)} {(-print)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:60) cond: [(C {(read)} {(file)})] body: (command.DoGroup children: [ (C {(echo)} {(-n)} {(DQ ('editing ') ($ Id.VSub_DollarName '$file') (': '))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-s)} {($ Id.VSub_DollarName '$file')}) terminator: (Token id:Id.Op_Semi val:';' span_id:87) ) ] action: [ (command.Simple words: [ {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/[ \t]*$//g' span_id:97))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:100) fd: -1 arg_word: {($ Id.VSub_DollarName '$file')} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:103) fd: -1 arg_word: {($ Id.VSub_DollarName '$temp')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-s)} {($ Id.VSub_DollarName '$temp')}) terminator: (Token id:Id.Op_Semi val:';' span_id:115) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$file')} {($ Id.VSub_DollarName '$temp')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:129) ) ] action: [(C {(echo)} {(-n)} {(DQ ('file not changed: '))})] spids: [120 131] ) ] else_action: [ (C {(cp)} {($ Id.VSub_DollarName '$temp')} {($ Id.VSub_DollarName '$file')} ) ] ) (C {(echo)} {(DQ (done))}) ] spids: [108 117] ) ] else_action: [(C {(echo)} {(DQ ('produced an empty file - aborting'))})] ) ] spids: [80 89] ) ] else_action: [(C {(echo)} {(DQ ('original file is empty.'))})] ) ] ) ) ] negated: F ) (C {(echo)} {(DQ ('all done'))}) (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$temp')}) ] )