1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-10-31 20:42:43 +00:00
serenity/Userland/Utilities
Rodrigo Tobar 41fa1a1461 Utilities: Add more commands, addresses, spaces, cmdline parsing to sed
The initial version of sed implements only the `s` command (given on the
command line) applied to all lines of the input file. While this is
probably the most common scenario that people use sed with in the wild,
it's limited in several ways:

 * `s` is only one of the many commands that sed is meant to implement.
 * Commands may take one or two addresses that limits its applicability
   to input lines.
 * Commands in general operate over the "pattern" and "hold" spaces
   rather than blindly over input lines.
 * Command line parameters include specifying a script file, and
   optionally input file(s) and/or a script to execute.

This commit implements a big portion of these missing features:

 * It adds support for parsing *almost* all commands and their
   arguments.
 * It also implements the execution of a big portion of the commands.
 * It adds support for parsing the optional addresses that prefix a
   command, and enables/disables commands based on these address ranges.
 * It implements the pattern and hold spaces, which are the source of
   input/output for most of the commands.
 * It improves the command line argument handling to receive a script
   file, potentially multiple execution scripts, and optional input
   files.

Some know missing functionality:

 * The `{` and `}` commands are not supported yet.
 * Pattern-based addresses are not supported yet.
 * Labels and branches are parsed, but not supported at runtime.
2023-04-09 18:09:23 -06:00
..
abench.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
adjtime.cpp Userland: Remove unecessary uses of __serenity__ macro 2022-10-10 12:23:12 +02:00
allocate.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
aplay.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
arp.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
asctl.cpp Everywhere: Rename equals_ignoring_case => equals_ignoring_ascii_case 2023-03-10 13:15:44 +01:00
base64.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
basename.cpp Everywhere: Use default execpromises argument for Core::System::pledge 2021-11-28 08:04:57 +01:00
beep.cpp Kernel+Userland: Add support for using the PCSpeaker with various tones 2023-03-05 08:38:29 +00:00
blockdev.cpp blockdev: Use Core::System::open() instead of LibC open() 2023-01-08 15:19:59 +00:00
bt.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
cal.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
cat.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
checksum.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
chgrp.cpp chgrp: Use StringView instead of 'char const*' 2023-01-08 19:02:50 +01:00
chmod.cpp chmod: Implement the --recursive flag 2022-07-25 15:32:46 +02:00
chown.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
chres.cpp Userland: Always construct Application with try_create() 2022-04-18 12:57:34 +02:00
cksum.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
clear.cpp Utilities: Use default execpromises parameter to pledge(..) 2022-04-03 17:13:51 -07:00
CMakeLists.txt Utilities: Add more commands, addresses, spaces, cmdline parsing to sed 2023-04-09 18:09:23 -06:00
cmp.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
comm.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
config.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
copy.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
cp.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
cpp-lexer.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
cpp-parser.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
cpp-preprocessor.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
cut.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
date.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
dd.cpp Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
df.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
diff.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
dirname.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
disasm.cpp Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
disk_benchmark.cpp disk_benchmark: Remove the call to umask 2023-03-31 09:43:00 +02:00
dmesg.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
du.cpp LibCore+Everywhere: Return an Error from DirIterator::error() 2023-03-05 20:23:42 +01:00
echo.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
env.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
errno.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
expr.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
false.cpp false: Port to LibMain 2022-01-14 19:42:19 +02:00
fdtdump.cpp LibDeviceTree: Add a slow, allocation-free property fetch API 2023-02-19 13:49:07 +01:00
file.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
find.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
flock.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
fortune.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
functrace.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
gml-format.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
grep.cpp grep: Read patterns from a file with -f 2023-04-01 13:49:47 -06:00
gron.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
groupadd.cpp Everywhere: Use my fairly new and shiny serenityos.org email :^) 2022-06-30 15:59:42 +01:00
groupdel.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
groups.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
gunzip.cpp gunzip+LibCompress: Move utility to decompress files to GzipDecompressor 2023-04-01 08:15:49 +02:00
gzip.cpp gzip: Use utilities from LibCompress to (de)compress files 2023-04-01 08:15:49 +02:00
head.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
headless-browser.cpp headless-browser: Don't print extra newline after layout tree dumps 2023-03-25 19:41:31 +01:00
hello-world.jakt Meta+Userland: Add jakt as an optional Lagom Tool 2022-05-23 23:05:45 +02:00
hexdump.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
host.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
hostname.cpp Userland: Convert command line arguments to String/StringView 2022-07-12 23:11:35 +02:00
icc.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
id.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
ifconfig.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
image.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
image2bin.cpp LibGfx: Remove try_ prefix from bitmap creation functions 2023-01-26 20:24:37 +00:00
ini.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
install.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
jail-attach.cpp Userland: Enhance jail-attach utility to support existing and new jails 2022-11-26 01:47:50 -07:00
jail-create.cpp Userland: Add support for jails 2022-11-05 18:00:58 -06:00
js.cpp LibJS: Propagate errors from VM creation 2023-03-17 16:39:08 +00:00
json.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
kcov-example.cpp Kernel+Userland: Unify declarations for KCOV in Kernel/API/kcov.h 2023-02-24 20:35:45 +01:00
keymap.cpp Everywhere: Remove needless copies of Error / ErrorOr instances 2023-02-10 09:08:52 +00:00
kill.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
killall.cpp LibCore: Use Core::Stream for ProcessStatisticsReader 2022-12-10 11:49:24 +00:00
ldd.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
less.cpp less: Stop adding extra blank lines 2023-03-06 21:44:28 +01:00
ln.cpp Everywhere: Remove needless copies of Error / ErrorOr instances 2023-02-10 09:08:52 +00:00
logout.cpp Userland: Remove a bunch of unveil calls on /sys/kernel/processes 2023-01-13 13:41:30 +01:00
ls.cpp Kernel+Userland: Make some of the POSIX types larger 2023-04-04 10:33:42 +02:00
lsblk.cpp LibCore+Everywhere: Return an Error from DirIterator::error() 2023-03-05 20:23:42 +01:00
lscpu.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
lsirq.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
lsjails.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
lsof.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
lspci.cpp LibCore+Everywhere: Return an Error from DirIterator::error() 2023-03-05 20:23:42 +01:00
lsusb.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
lzcat.cpp lzcat: Use BufferedFile for reading inputs 2023-04-05 07:30:38 -04:00
man.cpp man: Skip shellrc when invoking pager using sh 2023-03-07 00:42:32 +01:00
markdown-check.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
matroska.cpp AK+Everywhere: Do not implicitly copy variables in TRY macros 2023-02-10 09:08:52 +00:00
md.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
mkdir.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
mkfifo.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
mknod.cpp mknod: Port to LibMain 2022-01-24 14:01:58 +03:30
mktemp.cpp Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
mount.cpp LibCore+Everywhere: Return an Error from DirIterator::error() 2023-03-05 20:23:42 +01:00
mv.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
nc.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
netstat.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
nl.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
nologin.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
notify.cpp LibGfx: Remove try_ prefix from bitmap creation functions 2023-01-26 20:24:37 +00:00
nproc.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
ntpquery.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
open.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
passwd.cpp passwd: Use StringView instead of DeprecatedString 2023-01-08 17:10:53 +01:00
paste.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
pathchk.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
pgrep.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
pidof.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
ping.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
pkill.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
pledge.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
pls.cpp Userland/pls: Use Core::System::exec_command method to execute a command 2022-11-05 18:00:58 -06:00
pmap.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
pmemdump.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
printf.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
pro.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
profile.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
ps.cpp LibCore: Use Core::Stream for ProcessStatisticsReader 2022-12-10 11:49:24 +00:00
purge.cpp purge: Port to LibMain 2022-03-22 11:39:20 +01:00
pwd.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
readelf.cpp AK+readelf: Issue error when using ARCH(arch) with nonexistent arch 2023-03-03 21:53:41 +01:00
readlink.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
realpath.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
reboot.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
rev.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
rm.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
rmdir.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
route.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
run-tests.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
sed.cpp Utilities: Add more commands, addresses, spaces, cmdline parsing to sed 2023-04-09 18:09:23 -06:00
seq.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
shot.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
shuf.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
shutdown.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
sleep.cpp Utilities: Use default execpromises parameter to pledge(..) 2022-04-03 17:13:51 -07:00
sort.cpp sort: Add an option to sort in reverse order 2023-03-13 07:53:24 +00:00
sql.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
stat.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
strace.cpp Kernel: Merge {get,set}_process_name syscalls to the prctl syscall 2023-03-15 20:10:48 +01:00
strings.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
stty.cpp Everywhere: Remove unused includes of AK/Array.h 2023-01-02 20:08:35 +00:00
su.cpp su: Only check for an interactive tty if a password is actually needed 2023-02-16 12:52:11 +00:00
sync.cpp sync: Port to LibMain 2022-02-01 04:58:24 +00:00
syscall.cpp LibCore+Userland: Remove ArgsParser::add*(Vector<char const*>&) 2023-03-01 10:47:19 +01:00
sysctl.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
tac.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
tail.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
tar.cpp tar: Use BufferedFile for reading inputs 2023-04-05 07:30:38 -04:00
tee.cpp Everywhere: Use my fairly new and shiny serenityos.org email :^) 2022-06-30 15:59:42 +01:00
telws.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
test-bindtodevice.cpp test-bindtodevice: Port to LibMain 2022-03-29 21:28:29 -07:00
test-fuzz.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
test-imap.cpp LibCore+Userland: Allow canceling promises 2023-03-13 12:12:17 +00:00
test-pthread.cpp Everywhere: Remove NonnullRefPtr.h includes 2023-03-06 23:46:35 +01:00
test-unveil.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
test.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
test_env.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
timezone.cpp Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
top.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
touch.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
tr.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
traceroute.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
tree.cpp LibCore+Everywhere: Return an Error from DirIterator::error() 2023-03-05 20:23:42 +01:00
true.cpp true: Port to LibMain 2022-03-22 11:39:20 +01:00
truncate.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
tsort.cpp AK: Add take_first to HashTable and rename pop to take_last 2023-02-21 22:13:06 +01:00
tt.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
ttfdisasm.cpp Userland+AK: Stop using getopt() for ArgsParser 2023-02-28 15:52:24 +03:30
tty.cpp tty: Port to LibMain 2022-03-29 21:28:29 -07:00
umount.cpp umount: Port to LibMain 2022-01-22 13:31:52 +02:00
uname.cpp Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
uniq.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
unveil.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
unzip.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
update-cpp-test-results.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
uptime.cpp AK: Rename Stream::{read,write} to Stream::{read_some,write_some} 2023-03-13 15:16:20 +00:00
useradd.cpp AK+Everywhere: Change AK::fill_with_random to accept a Bytes object 2023-04-03 15:53:49 +02:00
userdel.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
usermod.cpp LibCore: Rename File to DeprecatedFile 2023-02-13 00:50:07 +00:00
utmpupdate.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
w.cpp LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
wallpaper.cpp LibGfx: Remove try_ prefix from bitmap creation functions 2023-01-26 20:24:37 +00:00
wasm.cpp Everywhere: Remove unintentional partial stream reads and writes 2023-03-13 15:16:20 +00:00
watch.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00
wc.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
which.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
whoami.cpp whoami: Port to LibMain :^) 2021-11-30 23:34:40 +01:00
wsctl.cpp Userland: Always construct Application with try_create() 2022-04-18 12:57:34 +02:00
xargs.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
xml.cpp Everywhere: Stop using NonnullOwnPtrVector 2023-03-06 23:46:35 +01:00
xzcat.cpp xzcat: Use BufferedFile for reading inputs 2023-04-05 07:30:38 -04:00
yes.cpp LibCore+Everywhere: Remove ArgsParser::add*(char const*&) 2023-03-01 10:47:19 +01:00
zip.cpp Everywhere: Use LibFileSystem where trivial 2023-03-21 19:03:21 +00:00