|
|
1.1 ! root 1: .TH SED 1 ! 2: .SH NAME ! 3: sed \- stream editor ! 4: .SH SYNOPSIS ! 5: .B sed ! 6: [ ! 7: .B -n ! 8: ] ! 9: [ ! 10: .B -g ! 11: ] ! 12: [ ! 13: .B -e ! 14: .I script ! 15: ] ! 16: [ ! 17: .B -f ! 18: .I sfile ! 19: ] ! 20: [ ! 21: .I file ... ! 22: ] ! 23: .SH DESCRIPTION ! 24: .I Sed ! 25: copies the named ! 26: .I files ! 27: (standard input default) to the standard output, ! 28: edited according to a script of commands. ! 29: The ! 30: .B -f ! 31: option causes the script to be taken from file ! 32: .IR sfile ; ! 33: these options accumulate. ! 34: If there is just one ! 35: .B -e ! 36: option and no ! 37: .BR -f 's, ! 38: the flag ! 39: .B -e ! 40: may be omitted. ! 41: The ! 42: .B -n ! 43: option suppresses the default output; ! 44: .B -g ! 45: causes all substitutions to be global, as if suffixed ! 46: .BR g . ! 47: .PP ! 48: A script consists of editing commands, one per line, ! 49: of the following form: ! 50: .IP ! 51: [\fIaddress\fR [\fL,\fI address\fR] ] \fIfunction\fR [\fIargument\fR ...] ! 52: .PP ! 53: In normal operation ! 54: .I sed ! 55: cyclically copies a line of input into a ! 56: .I pattern space ! 57: (unless there is something left after ! 58: a ! 59: .L D ! 60: command), ! 61: applies in sequence ! 62: all commands whose ! 63: .I addresses ! 64: select that pattern space, ! 65: and at the end of the script copies the pattern space ! 66: to the standard output (except under ! 67: .BR -n ) ! 68: and deletes the pattern space. ! 69: .PP ! 70: An ! 71: .I address ! 72: is either a decimal number that counts ! 73: input lines cumulatively across files, a ! 74: .L $ ! 75: that ! 76: addresses the last line of input, or a context address, ! 77: .BI / regular-expression / \f1, ! 78: in the style of ! 79: .IR regexp (6), ! 80: with the added convention that ! 81: .L \en ! 82: matches a ! 83: newline embedded in the pattern space. ! 84: .PP ! 85: A command line with no addresses selects every pattern space. ! 86: .PP ! 87: A command line with ! 88: one address selects each pattern space that matches the address. ! 89: .PP ! 90: A command line with ! 91: two addresses selects the inclusive range from the first ! 92: pattern space that matches the first address through ! 93: the next pattern space that matches ! 94: the second. ! 95: (If the second address is a number less than or equal ! 96: to the line number first selected, only one ! 97: line is selected.) ! 98: Thereafter the process is repeated, looking again for the ! 99: first address. ! 100: .PP ! 101: Editing commands can be applied to non-selected pattern ! 102: spaces by use of the negation function ! 103: .L ! ! 104: (below). ! 105: .PP ! 106: An argument denoted ! 107: .I text ! 108: consists of one or more lines, ! 109: all but the last of which end with ! 110: .L \e ! 111: to hide the ! 112: newline. ! 113: Backslashes in text are treated like backslashes ! 114: in the replacement string of an ! 115: .L s ! 116: command, ! 117: and may be used to protect initial blanks and tabs ! 118: against the stripping that is done on ! 119: every script line. ! 120: .PP ! 121: An argument denoted ! 122: .I rfile ! 123: or ! 124: .I wfile ! 125: must terminate the command ! 126: line and must be preceded by exactly one blank. ! 127: Each ! 128: .I wfile ! 129: is created before processing begins. ! 130: There can be at most 120 distinct ! 131: .I wfile ! 132: arguments. ! 133: .TP \w'\fL!\ \fIfunction\fLXXX'u ! 134: .B a\e ! 135: .br ! 136: .ns ! 137: .TP ! 138: .I text ! 139: Append. ! 140: Place ! 141: .I text ! 142: on the output before ! 143: reading the next input line. ! 144: .TP ! 145: .BI b " label" ! 146: Branch to the ! 147: .B : ! 148: command bearing the ! 149: .IR label . ! 150: If ! 151: .I label ! 152: is empty, branch to the end of the script. ! 153: .TP ! 154: .B c\e ! 155: .br ! 156: .ns ! 157: .TP ! 158: .I text ! 159: Change. ! 160: Delete the pattern space. ! 161: With 0 or 1 address or at the end of a 2-address range, place ! 162: .I text ! 163: on the output. ! 164: Start the next cycle. ! 165: .TP ! 166: .B d ! 167: Delete the pattern space. ! 168: Start the next cycle. ! 169: .TP ! 170: .B D ! 171: Delete the initial segment of the ! 172: pattern space through the first newline. ! 173: Start the next cycle. ! 174: .TP ! 175: .B g ! 176: Replace the contents of the pattern space ! 177: by the contents of the hold space. ! 178: .TP ! 179: .B G ! 180: Append the contents of the hold space to the pattern space. ! 181: .TP ! 182: .B h ! 183: Replace the contents of the hold space by the contents of the pattern space. ! 184: .TP ! 185: .B H ! 186: Append the contents of the pattern space to the hold space. ! 187: .ne 3 ! 188: .TP ! 189: .B i\e ! 190: .br ! 191: .ns ! 192: .TP ! 193: .I text ! 194: Insert. ! 195: Place ! 196: .I text ! 197: on the standard output. ! 198: .TP ! 199: .B n ! 200: Copy the pattern space to the standard output. ! 201: Replace the pattern space with the next line of input. ! 202: .TP ! 203: .B N ! 204: Append the next line of input to the pattern space ! 205: with an embedded newline. ! 206: (The current line number changes.) ! 207: .TP ! 208: .B p ! 209: Print. ! 210: Copy the pattern space to the standard output. ! 211: .TP ! 212: .B P ! 213: Copy the initial segment of the pattern space through ! 214: the first newline to the standard output. ! 215: .TP ! 216: .B q ! 217: Quit. ! 218: Branch to the end of the script. ! 219: Do not start a new cycle. ! 220: .TP ! 221: .BI r " rfile" ! 222: Read the contents of ! 223: .IR rfile . ! 224: Place them on the output before reading ! 225: the next input line. ! 226: .TP ! 227: .B s/\fIregular-expression\fP/\fIreplacement\fP/\fIflags ! 228: Substitute the ! 229: .I replacement ! 230: string for instances of the ! 231: .I regular-expression ! 232: in the pattern space. ! 233: Any character may be used instead of ! 234: .LR / . ! 235: For a fuller description see ! 236: .IR regexp (6). ! 237: .I Flags ! 238: is zero or more of ! 239: .RS ! 240: .TP ! 241: .B g ! 242: Global. ! 243: Substitute for all non-overlapping instances of the ! 244: .I regular expression ! 245: rather than just the ! 246: first one. ! 247: .TP ! 248: .B p ! 249: Print the pattern space if a replacement was made. ! 250: .TP ! 251: .BI w " wfile" ! 252: Write. ! 253: Append the pattern space to ! 254: .I wfile ! 255: if a replacement ! 256: was made. ! 257: .RE ! 258: .TP ! 259: .BI t " label" ! 260: Test. ! 261: Branch to the ! 262: .L : ! 263: command bearing the ! 264: .I label ! 265: if any ! 266: substitutions have been made since the most recent ! 267: reading of an input line or execution of a ! 268: .LR t . ! 269: If ! 270: .I label ! 271: is empty, branch to the end of the script. ! 272: .TP ! 273: .B w ! 274: .I wfile ! 275: .br ! 276: Write. ! 277: Append the pattern space to ! 278: .IR wfile . ! 279: .TP ! 280: .B x ! 281: Exchange the contents of the pattern and hold spaces. ! 282: .TP ! 283: .B y/\fIstring1\fP/\fIstring2\fP/ ! 284: Transform. ! 285: Replace all occurrences of characters in ! 286: .I string1 ! 287: with the corresponding character in ! 288: .IR string2 . ! 289: The lengths of ! 290: .I ! 291: string1 ! 292: and ! 293: .I string2 ! 294: must be equal. ! 295: .TP ! 296: .BI ! "function" ! 297: Don't. ! 298: Apply the ! 299: .I function ! 300: (or group, if ! 301: .I function ! 302: is ! 303: .LR { ) ! 304: only to lines ! 305: .I not ! 306: selected by the address(es). ! 307: .TP ! 308: .BI : " label" ! 309: This command does nothing; it bears a ! 310: .I label ! 311: for ! 312: .B b ! 313: and ! 314: .B t ! 315: commands to branch to. ! 316: .TP ! 317: .B = ! 318: Place the current line number on the standard output as a line. ! 319: .TP ! 320: .B { ! 321: Execute the following commands through a matching ! 322: .L } ! 323: only when the pattern space is selected. ! 324: .TP ! 325: .B " " ! 326: An empty command is ignored. ! 327: .ne 4 ! 328: .SH EXAMPLES ! 329: .TP ! 330: .B sed 10q file ! 331: Print the first 10 lines of the file. ! 332: .TP ! 333: .B sed '/^$/d' ! 334: Delete empty lines from standard input. ! 335: .TP ! 336: .B sed 's/UNIX/& system/g' ! 337: Replace every instance of ! 338: .L UNIX ! 339: by ! 340: .LR "UNIX system" . ! 341: .PP ! 342: .EX ! 343: sed 's/ *$// \fRdrop trailing blanks\fP ! 344: /^$/d \fRdrop empty lines\fP ! 345: s/ */\e \fRreplace blanks by newlines\fP ! 346: /g ! 347: /^$/d' chapter* ! 348: .EE ! 349: .ns ! 350: .IP ! 351: Print the files ! 352: .BR chapter1 , ! 353: .BR chapter2 , ! 354: etc. one word to a line. ! 355: .PP ! 356: .EX ! 357: nroff -ms manuscript | sed ' ! 358: ${ ! 359: /^$/p \fRif last line of file is empty, print it\fP ! 360: } ! 361: //N \fRif current line is empty, append next line\fP ! 362: /^\en$/D' \fRif two lines are empty, delete the first\fP ! 363: .EE ! 364: .ns ! 365: .IP ! 366: Delete all but one of each group of empty lines from a ! 367: formatted manuscript. ! 368: .SH SOURCE ! 369: .B /sys/src/cmd/sed.c ! 370: .SH SEE ALSO ! 371: .IR ed (1), ! 372: .IR grep (1), ! 373: .IR awk (1), ! 374: .IR lex (1), ! 375: .IR sam (1), ! 376: .IR regexp (6) ! 377: .br ! 378: L. E. McMahon, ! 379: `SED \(em A Non-interactive Text Editor', ! 380: Unix Research System Programmer's Manual, Volume 2. ! 381: .SH BUGS ! 382: If input is from a pipe, buffering may consume ! 383: characters beyond a line on which a ! 384: .L q ! 385: command is executed.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.