diff -r 9c1d0c5ed599 -r d4f401b5f90c relpipe-data/examples-out-fstab.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/relpipe-data/examples-out-fstab.xml Tue Feb 05 19:18:28 2019 +0100 @@ -0,0 +1,88 @@ + + + Formatting fstab + implementing a simple relpipe-out-fstab filter using -in-fstab, -out-nullbyte, xargs and Perl + 00300 + + + +

+ As we have seen before, we can convert /etc/fstab (or mtab) + to e.g. an XML or a nice and colorful table using . + But we can also convert these data back to the fstab format. And do it with proper indentation/padding. + Fstab has a simple format where values are separated by one or more whitespace characters. + But without proper indentation, these files look a bit obfuscated and hard to read (however, they are valid). +

+ + + +

+ So let's build a pipeline that reformats the fstab and makes it more readable. +

+ + relpipe-in-fstab | relpipe-out-fstab > reformatted-fstab.txt + +

+ We can hack together a script called relpipe-out-fstab that accepts relational data and produces fstab data. + Later this will be probably implemented as a regular tool, but for now, it is just an example of a ad-hoc shell script: +

+ + + +

+ In the first part, we prepend a single record (relpipe-in-cli) before the data coming from STDIN (cat). + Then, we use relpipe-out-nullbyte to convert relational data to values separated by a null-byte. + This command processes only attribute values (skips relation and attribute names). + Then we used xargs to read the null-separated values and execute a Perl command for each record (pass to it a same number of arguments, as we have attributes: --max-args=7). + Perl does the actual formatting: adds padding and does some little tunning (merges two attributes and replaces empty values with none). +

+ +

This is formatted version of the fstab above:

+ + + +

+ And using following command we can verify, that the files differ only in comments and whitespace: +

+ +
relpipe-in-fstab | relpipe-out-fstab | diff -w /etc/fstab -
+ +

+ Another check (should print same hashes): +

+ +
+ +

+ Regular implementation of relpipe-out-fstab will probably keep the comments + (it needs also one more attribute and small change in relpipe-in-fstab). +

+ +

+ For just mere fstab reformatting, this approach is a bit overengineering. + We could skip the whole relational thing and do just something like this: +

+ + cat /etc/fstab | grep -v '^#' | sed -E 's/\s+/\n/g' | tr \\n \\0 | xargs -0 -n7 ... + +

+ plus prepend the comment (or do everything in Perl). + But this example is intended as a demostration, how we can + 1) prepend some additional data before the data from STDIN + 2) use and traditional tools like xargs or perl together. + And BTW we have implemented a (simple but working) relpipe output filter – and did it without any serious programming, just put some existing commands together :-) +

+ +
+

+ There is more Unix-nature in one line of shell script than there is in ten thousand lines of C. + see Master Foo and the Ten Thousand Lines +

+
+ +
+ +